varchar与存储变量的长度



是否可以调用字段长度的变量(varchar(。通常,除了出于数学目的需要数字字段之外,我总是在大多数情况下使用nvarchar(max)。这是可以的,直到桌子很大,性能受到很大的影响。

是否可以使用varchar(max)创建一列,然后运行长度查询以创建最大字符数(本例仅为一条记录,因此我并不是真正根据最大值进行筛选。我理解这一点(。然后将该数字存储到一个变量中,并调用该变量创建一个新的varchar列?

其他用途可能是将输出/结果存储为其他语句的变量。

这可能吗?

谢谢。

CREATE TABLE Test (
MyCol nvarchar(max) 
);
INSERT INTO Test (MyCol)
VALUES ('asdfasdfasdfasdfasdfasdfasdfasdfadfsasdfadfs');
SELECT LEN(MyCol) FROM Test
--44 characters. Store this as output as variable
ALTER TABLE TEST ADD NewMyCol varchar(VARIABLE_HERE?) --LEN from above
UPDATE TEST SET NewMyCol = MyCol FROM test 

注释是准确的,根据表中存储的当前长度添加一列对我来说似乎很危险,而且我并没有真正看到好处。

然而,不管有多少人说这是个坏主意,人们都会想这么做:

DECLARE @len int;
SELECT @len = MAX(LEN(MyCol)) FROM dbo.Test;
DECLARE @sql nvarchar(max) = N'
ALTER TABLE TEST ADD NewMyCol varchar($l$);';
SET @sql = REPLACE(@sql, N'$l$', RTRIM(@len));
EXEC sys.sp_executesql @sql;

这把小提琴上的榜样。

最新更新