我正在尝试修改SQL Server 2012数据库中特定表中特定列的数据类型。在脚本的开头,用户将设置列数据类型的新期望长度。但是,当我尝试更改表中的列以设置新的varchar长度时,出现错误。

这是代码段和产生的错误:

Declare @newPrecis int

Set @newPrecis = 23 -- New length of the index

Alter Table [dbo].[VTAB0047] Alter Column VAL varchar(@newPrecis)

错误:



目前,VAL列的长度为varchar(20),我希望将其设置为23的长度,或者将其设置为set语句中输入的任何长度。

我现在忽略了任何类型的错误检查,因为我只是在尝试降低基本功能。

最佳答案

如果您希望能够更改lengthvarchar column,请使用dynamically,因为dynimic sql不允许varchar(n)的参数:

declare @sql varchar(500);
Declare @newPrecis int
Set @newPrecis = 23 --or any other value

set @sql='Alter Table [dbo].[VTAB0047] Alter Column VAL varchar('+cast(@newPrecis as varchar(2))'+')'
exec(@sql)

或者您可以直接使用:
Alter Table [dbo].[VTAB0047] Alter Column VAL varchar(23)

注意:如果您的n的新值小于旧值,那么如果您的值的长度大于length的新值,则可能会收到n错误。

10-08 00:49
查看更多