Õzb*_*bek 3 sql sql-server-2008
我在使用ntext数据库中的类型转换所有表列时遇到问题.我写了这个查询以改变我的列,但是有一个语法错误:
ALTER TABLE mytable ALTER COLUMN mycolumn
VARCHAR(SELECT MAX(DATALENGTH(mycolumn)) FROM mytable);
Run Code Online (Sandbox Code Playgroud)
即使SELECT MAX(DATALENGTH(mycolumn)) FROM mytable返回正确的数字,也无法执行查询.
语法错误是:
关键字'select'附近的语法不正确.(在里面
varchar)
我该如何解决这个问题?
您需要将其作为动态sql执行,因为列的大小不能是变量.
DECLARE @Length int = SELECT MAX(DATALENGTH(mycolumn)) FROM mytable
DECLARE @MyTable varchar(100) = 'mytable'
DECLARE @MyColumn varchar(100) = 'mycolumn'
DECLARE @SQL varchar(8000) = 'ALTER TABLE ' + @MyTable +' ALTER COLUMN '+ @MyColumn +' VARCHAR(' + CONVERT(varchar, @Length) + ')'
EXEC(@SQL)
Run Code Online (Sandbox Code Playgroud)
这样做的好处是你可以遍历sys.objects并sys.columns查找所有ntext列并将它们转换为varchar.