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

标签 sql sql-server-2008

在我的数据库中转换所有具有 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.objectssys.columns 来查找所有 ntext 列并将它们转换为 varchar。

关于sql - 在 SQL Server 中将 ntext 列类型更改为 varchar(n),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12731046/

相关文章:

sql-server - 为什么 Intellisense 在 SQL Server Management Studio 2008 R2 中不起作用?

sql-server - 如何在 MS SQL-Server 上查找具有特殊字符(如 'José')的名称

sql - 复合类型 Postgresql 中的更新/删除

mysql - SUM OVER PARTITION BY 2 最后一行相同的值

sql - 如何按小时或 10 分钟对时间进行分组?

asp.net - 在 SQL 查询中使用 LIKE

SQL:错误,已达到表达式服务限制?

php - 如何在mysql中具有外键属性的表中插入新记录

sql - 将函数作为参数传递给存储过程

sql - Scope_Identity()、Identity()、@@Identity 和 Ident_Current() 之间有什么区别?