如何将这些SQL语句分组为一批,以便一次执行全部?

时间:2019-04-02 14:40:02

标签: sql sql-server tsql

为了合并加密,我对表的架构进行了几处更改。

  1. 更改表:添加列

    ALTER TABLE Demo
    ADD name_Encrypted VARBINARY(MAX)
    
  2. 根据我要加密的字段在此字段中添加加密的值。

    OPEN symmetric KEY symkey decryption BY assymetric KEY asym_key 
    
    UPDATE demo 
    SET name_encrypted = Encryptbykey(Key_guid('Symkey'), NAME) 
    FROM demo 
    
    CLOSE symmetric KEY symkey
    
  3. DROP未加密列

    ALTER TABLE Demo DROP COLUMN Name
    
  4. 将加密列重命名为原始名称

    EXEC Sp_rename 'Demo.Name_encrypted','Name'
    

如果将它们全部放入存储过程中,即使我在第一步中创建了一个名字,我也会收到一条错误消息,指出“ name_Encrypted列不存在”。

如何将所有这些语句分批处理,所以我只需运行一次即可执行所有语句?

2 个答案:

答案 0 :(得分:3)

在每个DDL语句之后添加一个GO语句,以将其提交给数据库引擎。请参阅以下link

答案 1 :(得分:3)

我认为您遇到了与您相反的问题。您不能在一个批处理/事务/等中全部完成这些操作-因为您正试图添加到尚未添加的列中。实际上,您需要所有这些都是单独的事务。

我认为您正在寻找的答案是在每个步骤之间添加“ GO”,以告知SQL在继续进行之前的部分的处理。添加列“ GO”以告诉SQL在尝试继续之前完成列的添加;填充字段,“ GO”告诉SQL在继续之前完成填充字段。删除字段,“转到”等。