gpt4 book ai didi

sql - 使列长度成为另一个数据库中列的最大长度

转载 作者:行者123 更新时间:2023-12-04 18:27:56 25 4
gpt4 key购买 nike

我想做的是这样的:

USE [database]

ALTER TABLE Client
ALTER COLUMN CLientNameShort NVARCHAR(SELECT MAX(LEN([database].dbo.Sites.Sitename))

如果列超过一定长度,我还想对其进行 TRIM,因此它将列的最大长度设置为另一个数据库中的最大值,除非最大列超过 500 个字符等。如果超过 500 ,该列被修剪为 500。

这可能吗?

问候

编辑:

最后是这样的:

CREATE PROCEDURE alterFieldSize 
@column NVARCHAR(MAX), @table NVARCHAR(MAX)
AS
-- DECLARE VARIABLES
DECLARE @sql NVARCHAR(MAX)
DECLARE @fieldLen INT
DECLARE @columnLen INT

-- SET VARIABLES
SET @sql = 'ALTER TABLE Client ALTER COLUMN ' + @column + 'NVARCHAR('+cast(@fieldLen as varchar(20))+')'
SET @fieldLen = (SELECT MAX(LEN(s.Sitename))
FROM [database].dbo.Sites s)
SET @columnLen = (SELECT CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME = @column AND TABLE_NAME = @table)
SET @fieldLen = CASE
WHEN @fieldLen < @columnLen
THEN @columnLen
WHEN @fieldLen <=500
THEN @fieldLen
ELSE 500
END

-- Execution
EXEC(@sql)

然后像这样调用过程:

EXEC alterFieldSize @column = 'ClientNameShort', @table = 'Client';

命令运行成功,但实际上并没有改变列的最大长度。

有什么想法吗?

最佳答案

您需要先获取值。然后,我认为您需要为 alter table 使用动态 SQL。所以:

declare @len int;

select @len = max(len(s.Sitename))
from [database].dbo.Sites s;

declare @sql nvarchar(max);

set @sql = 'alter table client alter column ClientNameShort nvarchar(@len)';

set @sql = replace(@sql, '@len', @len);

exec sp_executesql @sql;

关于sql - 使列长度成为另一个数据库中列的最大长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41354055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com