2016-09-15 77 views
1

这是我想要实现的示例代码,我想向包含特定代码变量的表添加一列。但是,我无法真正了解sp_executesql如何传递它。任何帮助表示赞赏sp_executesql:使用case语句添加列

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 
+0

究竟是什么你想实现什么?将计算列添加到表中? – ZLK

回答

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 

希望这将帮助你

+0

嗨,现在它给了我错误未知对象类型'TABLEtable_nameADDColumn_Name'用于创建,删除或更改语句。任何提示可能是什么? – user3052850

+0

你应该把正确的表名称,并且我将编辑答案以在_ADD_ – Monah

+0

之前通过添加适当的间距更新答案,但您需要使用存在的正确table_name – Monah

0

看看sp_executesql

你需要构建查询为String。

我注意到您的查询几个问题:

  • FirstColumn和当您要添加新列SecondColumn未声明列
  • ,你需要指定列的数据类型。请参阅this

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

有关@ Code1,@ Code2和@ Code3的条件。你想要这个默认值?你想达到什么目的?

+0

它将成为计算列,这将取决于条件得到一个特定的代码。代码将是动态的,所以稍后会改变。不过,我只想让第一部分先工作。 – user3052850

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