如何将这些 SQL 语句分组到一个批处理中,以便一次执行所有语句



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

  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. 删除未加密的列

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

    EXEC Sp_rename 'Demo.Name_encrypted','Name'
    

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

如何将所有这些语句放在一个批处理中,以便我可以运行一次并执行所有语句?

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

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

我认为您正在寻找的答案是在每个步骤之间添加"GO",告诉SQL在继续之前完成上一节的处理。 添加列"GO"以告诉 SQL 在尝试继续之前完成添加列;填充字段,"GO"告诉 SQL 在继续之前完成填充字段。 删除一个字段,"GO"等。

最新更新