定义可变长度的 varchar
Define varchar with variable length
我正在尝试修改 SQL Server 2012 数据库中特定 table 中特定列的数据类型。在脚本的开头,用户将设置列数据类型的新所需长度。但是,当我尝试更改 table 中的列以设置新的 varchar
长度时,出现错误。
这是代码片段和产生的错误:
Declare @newPrecis int
Set @newPrecis = 23 -- New length of the index
Alter Table [dbo].[VTAB0047] Alter Column VAL varchar(@newPrecis)
错误:
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near '@newPrecis'.
目前 VAL
列的长度是 varchar(20)
,我希望将其设置为 23 的长度或在 set
语句中输入的任何长度。
目前我忽略了任何类型的错误检查,因为我只是想降低基本功能。
如果你希望能够改变 varchar column
dynamically
的 length
然后使用 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)
或者您可以直接使用:
Alter Table [dbo].[VTAB0047] Alter Column VAL varchar(23)
注意: 如果 n
的新值小于旧值,那么如果您的值长度大于旧值,则可能会出现 String or binary data would be truncated
错误比新的长度值。
如果这是脚本顶部的输入参数,则必须使用 Dynamic SQL 完成 ALTER TABLE 语句。例如。
DECLARE @SQL VARCHAR(MAX)
DECLARE @newPrecis INT
SET @SQL = 'ALTER TABLE dbo.VTAB0047 ALTER COLUMN VAL VARCHAR(' + CAST(@newPrecis AS VARCHAR(20)) + ')'
EXEC(@SQL)
Declare @newPrecis int
Declare @query varchar(max)
Set @newPrecis = 23; -- New length of the index
set @query ='Alter Table [dbo].[VTAB0047] Alter COLUMN VAL varchar('
+ Cast(@newPrecis as varchar) +')'
exec (@query)
我正在尝试修改 SQL Server 2012 数据库中特定 table 中特定列的数据类型。在脚本的开头,用户将设置列数据类型的新所需长度。但是,当我尝试更改 table 中的列以设置新的 varchar
长度时,出现错误。
这是代码片段和产生的错误:
Declare @newPrecis int
Set @newPrecis = 23 -- New length of the index
Alter Table [dbo].[VTAB0047] Alter Column VAL varchar(@newPrecis)
错误:
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near '@newPrecis'.
目前 VAL
列的长度是 varchar(20)
,我希望将其设置为 23 的长度或在 set
语句中输入的任何长度。
目前我忽略了任何类型的错误检查,因为我只是想降低基本功能。
如果你希望能够改变 varchar column
dynamically
的 length
然后使用 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)
或者您可以直接使用:
Alter Table [dbo].[VTAB0047] Alter Column VAL varchar(23)
注意: 如果 n
的新值小于旧值,那么如果您的值长度大于旧值,则可能会出现 String or binary data would be truncated
错误比新的长度值。
如果这是脚本顶部的输入参数,则必须使用 Dynamic SQL 完成 ALTER TABLE 语句。例如。
DECLARE @SQL VARCHAR(MAX)
DECLARE @newPrecis INT
SET @SQL = 'ALTER TABLE dbo.VTAB0047 ALTER COLUMN VAL VARCHAR(' + CAST(@newPrecis AS VARCHAR(20)) + ')'
EXEC(@SQL)
Declare @newPrecis int
Declare @query varchar(max)
Set @newPrecis = 23; -- New length of the index
set @query ='Alter Table [dbo].[VTAB0047] Alter COLUMN VAL varchar('
+ Cast(@newPrecis as varchar) +')'
exec (@query)