从加密列(始终加密)中选择数据到变量中的存储过程失败并出现错误
无法继续执行,因为会话处于 kill 状态
如果XACT_ABORT
设置为开。
删除行使SET XACT_ABORT ON;
存储过程完美地工作,但不清楚它是如何相关的。
完全删除变量也可以修复错误。
环境:
- Microsoft SQL Server 2016 Enterprise (64-bit) Service Pack 2 with CU2 (13.0.5153.0):目前最新版本。
- 微软视窗 NT 6.3 (15063)
存储过程:
CREATE PROCEDURE [SomeStoredProcedure]
WITH EXECUTE AS OWNER
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
DECLARE @EncryptedValue VARBINARY(4096);
SELECT TOP 1
@EncryptedValue = [someencryptedcolumn]
FROM
[sometable];
SELECT @EncryptedValue
RETURN 0;
END;
表声明:
CREATE TABLE [sometable]
(
[someencryptedcolumn] [varbinary](4096)
ENCRYPTED WITH
(
COLUMN_ENCRYPTION_KEY = [CEK1],
ENCRYPTION_TYPE = Randomized,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
)
NULL
)
样本数据:
INSERT INTO [sometable] ([someencryptedcolumn])
VALUES (NULL)
调用存储过程:
EXEC [SomeStoredProcedure];
错误:
Msg 596, Level 21, State 1, Line 29
无法继续执行,因为会话处于终止状态。消息 0,级别 20,状态 0,第 29 行
当前命令发生严重错误。结果,如果有的话,应该丢弃。
我没有找到关于 XACT_ABORT 和 Always Encrypted 如何相关的参考资料。
我还检查了 SQL Server 日志,但没有发现有关该问题的其他信息。
更新: