是否可以调用字段长度的变量(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;
这把小提琴上的榜样。