为了合并加密,我对表的架构进行了几处更改。
更改表:添加列
ALTER TABLE Demo
ADD name_Encrypted VARBINARY(MAX)
根据我要加密的字段在此字段中添加加密的值。
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
DROP未加密列
ALTER TABLE Demo DROP COLUMN Name
将加密列重命名为原始名称
EXEC Sp_rename 'Demo.Name_encrypted','Name'
如果将它们全部放入存储过程中,即使我在第一步中创建了一个名字,我也会收到一条错误消息,指出“ name_Encrypted列不存在”。
如何将所有这些语句分批处理,所以我只需运行一次即可执行所有语句?
答案 0 :(得分:3)
在每个DDL语句之后添加一个GO语句,以将其提交给数据库引擎。请参阅以下link
答案 1 :(得分:3)
我认为您遇到了与您相反的问题。您不能在一个批处理/事务/等中全部完成这些操作-因为您正试图添加到尚未添加的列中。实际上,您需要所有这些都是单独的事务。
我认为您正在寻找的答案是在每个步骤之间添加“ GO”,以告知SQL在继续进行之前的部分的处理。添加列“ GO”以告诉SQL在尝试继续之前完成列的添加;填充字段,“ GO”告诉SQL在继续之前完成填充字段。删除字段,“转到”等。