sp_executesql:使用case语句添加列

时间:2016-09-15 08:20:47

标签: sql-server sp-executesql

这是我想要实现的示例代码,我想在具有一些特定代码变量的表中添加一列。但是,我无法真正掌握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

3 个答案:

答案 0 :(得分:0)

您需要将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

希望这会对你有所帮助

答案 1 :(得分:0)

看看sp_executesql

您需要将查询构建为字符串。

我发现您的查询几乎没有问题:

  • FirstColumn和SecondColumn未声明为列
  • 如果要添加新列,则需要指定列的数据类型。请参阅this

    ALTER TABLE Tablecolumn ALTER COLUMN NewColumn NVARCHAR(20)NOT NULL;

表示@ Code1,@ Code2和@ Code3的条件。你想要这个默认值吗?你想要实现什么目标?

答案 2 :(得分:0)

该脚本最终相应地工作:

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