在SQL Server中将ntext列类型更改为varchar(n)

Õ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)

我该如何解决这个问题?

Jam*_*tis 5

您需要将其作为动态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.objectssys.columns查找所有ntext列并将它们转换为varchar.