这是我想实现的一个示例代码,我想添加一个列到一个表与一些特定的代码变量。但是,我不能真正理解sp_executesql是如何传递它的。感谢任何帮助
DECLARE @SQLQUERY NVARCHAR (max)
DECLARE @Table VARCHAR (200) = 'Table_Name'
DECLARE @Column VARCHAR (200) = 'Column_Name'
DECLARE @Code1 int = 1
DECLARE @Code2 int = 2
DECLARE @Code3 int = 3
SET @SQLQUERY = 'ALTER TABLE' + @Table + 'ADD' @Column
AS CASE WHEN FirstColumn IS NULL THEN @Code1
WHEN SecondColumn IS NULL THEN @Code2
ELSE @Code3
Exec sp_executesql @SQLQUERY
查看sp_executesql
您需要将查询构建为字符串。
我注意到你的查询有几个问题:
- FirstColumn和SecondColumn未声明column
-
当要添加新列时,需要指定列的数据类型。请看
表示@Code1、@Code2和@Code3的条件。你想让这个作为默认值吗?你想达到什么目标?
您需要将alter
语句全部构建为字符串,然后执行它,例如您的查询应该是这样的:
SET @SQLQUERY = 'ALTER TABLE ' + @Table + ' ADD ' + @Column +
' AS CASE WHEN FirstColumn IS NULL THEN ' + str(@Code1) +
' WHEN SecondColumn IS NULL THEN ' + str(@Code2) +
' ELSE ' + str(@Code3) + ' END'
注意:我使用str(@Code1)
,因为它被声明为int
则可以正常执行语句
Exec sp_executesql @SQLQUERY
希望对你有帮助
脚本最终是这样工作的:
DECLARE @Code1 int = 1
DECLARE @Code2 int = 2
DECLARE @Code3 int = 3
DECLARE @SQLQUERY NVARCHAR (max)
SET @SQLQUERY = N'ALTER TABLE Table ADD Column
AS CASE WHEN FirstColumn IS NULL THEN' STR(@Code1) +
'WHEN SecondColumn IS NULL THEN' STR(@Code2) +
' ELSE' str(@Code3) + ' END'
Exec sp_executesql @SQLQUERY