我正在尝试修改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
语句中输入的任何长度。我现在忽略了任何类型的错误检查,因为我只是在尝试降低基本功能。
最佳答案
如果您希望能够更改length
的varchar 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
错误。