在我的数据库中转换所有具有 ntext
类型的表列时遇到问题。我编写此查询是为了更改我的列,但存在语法错误:
ALTER TABLE mytable ALTER COLUMN mycolumn
VARCHAR(SELECT MAX(DATALENGTH(mycolumn)) FROM mytable);
即使 SELECT MAX(DATALENGTH(mycolumn)) FROM mytable
返回了正确的数字,查询也无法执行。
语法错误是:
Incorrect syntax near the keyword 'select'.(which is inside the
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)
这样做的好处是您可以遍历 sys.objects
和 sys.columns
来查找所有 ntext 列并将它们转换为 varchar。
关于sql - 在 SQL Server 中将 ntext 列类型更改为 varchar(n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12731046/