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