我正在尝试将未知大小的列动态添加到表中。为什么以下内容不起作用,否则如何在上下文中使该东西起作用?
DECLARE @size int
SET @size = 200
GO
ALTER TABLE Testbench.dbo.Certificate
ADD E35 NVARCHAR(@size)
这将产生:
@size
附近的语法错误
上下文
DECLARE @size int
SET @size = 200
GO
ALTER TABLE Testbench.dbo.Certificate
ADD E35 NVARCHAR(@size)
GO
UPDATE Testbench.dbo.Certificate
SET E35 = ''
ALTER TABLE Testbench.dbo.Certificate
ALTER COLUMN E35 NVARCHAR(@size) NOT NULL
这产生两次:
@size
附近的语法错误
谢谢。
答案 0 :(得分:2)
为什么以下各项不起作用?
因为不能在SQL Server中参数化数据定义语言(DDL)语句。您可以改用Dynamic SQL。 EG:
DECLARE @size int
SET @size = 200
DECLARE @sql nvarchar(max)
set @sql = concat('ALTER TABLE Testbench.dbo.Certificate ADD E35 NVARCHAR(',@size,')')
exec (@sql)
答案 1 :(得分:2)
这里有两个问题:
GO
批处理分隔符。 GO
不是sql语言的一部分。它是由几个著名工具使用的批处理分隔符,但是它不是语言的一部分。您看到的是您的工具在每个GO
之后作为单独的会话的一部分发送附加语句,其中@size
变量不再存在。ALTER
语句中使用参数。