定义具有可变长度的varchar

вʀa*_*ᴎєƞ 5 sql t-sql sql-server varchar alter-table

我试图修改SQL Server 2012数据库中的特定表中的特定列的数据类型.在脚本的开头,用户将设置列数据类型的新所需长度.但是,当我尝试更改表中的列以设置新varchar长度时,我收到错误.

以下是代码段和结果错误:

Declare @newPrecis int

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

Alter Table [dbo].[VTAB0047] Alter Column VAL varchar(@newPrecis)
Run Code Online (Sandbox Code Playgroud)

错误:

消息102,级别15,状态1,行5
'@ newPrecis'附近的语法不正确.

目前VAL列的长度是varchar(20),我希望它设置为23的长度或在set语句中输入的任何长度.

我现在忽略了任何类型的错误检查,因为我只是试图让基本功能失效.

Nul*_*ull 7

如果你希望能够改变lengthvarchar column dynamically 再使用dynimic sql,因为varchar(n)不允许参数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)
Run Code Online (Sandbox Code Playgroud)

或者你可以直接使用:

Alter Table [dbo].[VTAB0047] Alter Column VAL varchar(23)
Run Code Online (Sandbox Code Playgroud)

注意:如果您的新值n小于旧值,那么String or binary data would be truncated如果长度大于新值的值,则可能会出错.