Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server始终加密:操作数类型冲突:varchar与varchar(max)不兼容_Sql Server_Encryption_Always Encrypted - Fatal编程技术网

Sql server SQL Server始终加密:操作数类型冲突:varchar与varchar(max)不兼容

Sql server SQL Server始终加密:操作数类型冲突:varchar与varchar(max)不兼容,sql-server,encryption,always-encrypted,Sql Server,Encryption,Always Encrypted,由于英国即将实施法规变更,我正在开发的数据库需要更新,以加密任何个人身份信息 我的许多表都已成功更改,但是在一些有触发器的表上,我遇到以下错误 错误SQL72014:.Net SqlClient数据提供程序:Msg 206,级别16,状态2,过程tr_Employee_Update,第27行操作数类型冲突:varchar与用加密的varchar(max)不兼容(加密类型='DETERMINISTIC',加密算法\名称='AEAD\ U AES\ U 256\ CBC\ HMAC\ U SHA\

由于英国即将实施法规变更,我正在开发的数据库需要更新,以加密任何个人身份信息

我的许多表都已成功更改,但是在一些有触发器的表上,我遇到以下错误

错误SQL72014:.Net SqlClient数据提供程序:Msg 206,级别16,状态2,过程tr_Employee_Update,第27行操作数类型冲突:varchar与用加密的varchar(max)不兼容(加密类型='DETERMINISTIC',加密算法\名称='AEAD\ U AES\ U 256\ CBC\ HMAC\ U SHA\ U 256',列加密\密钥\名称='CEK\ U Auto1',列加密\密钥\数据库\名称='xxxx')排序规则\名称='Latin1\通用\ BIN2'

我在这里看到了这个问题,但是这并不能解决我的问题

这个问题也一样,我的问题不在哪里

我在许多表格上都有这个问题,因此如果您能提供任何帮助,我将不胜感激

请看这里的SQL小提琴

我不得不拆分表并触发创建,因为SQL长度大于8000个字符,但这是我能给出的最完整的示例

我使用加密类型:Deterministic和加密密钥名称:CEK_Auto1对列进行加密

并非此表中的所有列都需要加密,我正在修改其他一些也具有默认值的字段,这些字段确实需要进行加密

我们将非常感谢您在报告的问题上提供的任何和所有帮助

CREATE TABLE [dbo].[Employee] (
[EmployeeID]        INT           IDENTITY (1, 1) NOT NULL,
[EmployeeTypeID]    INT           NOT NULL,
[Title]             VARCHAR (50)  NOT NULL,
[Forename]          VARCHAR (30)  NOT NULL,
[Surname]           VARCHAR (30)  NOT NULL,
[AddressLine1]      VARCHAR (60)  NOT NULL,
[AddressLine2]      VARCHAR (60)  NOT NULL,
[AddressLine3]      VARCHAR (60)  NOT NULL,
[AddressLine4]      VARCHAR (60)  NOT NULL,
[Town]              VARCHAR (50)  NOT NULL,
[County]            VARCHAR (50)  NOT NULL,
[PostCode]          VARCHAR (20)  NOT NULL,
[Phone]             VARCHAR (20)  CONSTRAINT [DF_Employee_Phone] DEFAULT ('') NOT NULL,
[Mobile]            VARCHAR (20)  NOT NULL,
[Fax]               VARCHAR (20)  NOT NULL,
[Email]             VARCHAR (50)  NOT NULL,
[Extension]         VARCHAR (10)  CONSTRAINT [DF_Employee_Extension_1] DEFAULT ('') NOT NULL,
[SpeedDial]         VARCHAR (10)  CONSTRAINT [DF_Employee_SpeedDial_1] DEFAULT ('') NOT NULL,
[Notes]             VARCHAR (MAX) NOT NULL,
[EmployeeTeamID]    INT           NULL,
[Created]           DATETIME      CONSTRAINT [DF_Employee_Created] DEFAULT (getdate()) NOT NULL,
[OperatorIDCreated] INT           NOT NULL,
[Updated]           DATETIME      CONSTRAINT [DF_Employee_Updated] DEFAULT (getdate()) NOT NULL,
[OperatorIDUpdated] INT           NOT NULL,
[Deleted]           BIT           CONSTRAINT [DF_Employee_Deleted] DEFAULT ((0)) NOT NULL,
[EmployeeIDManager] INT           NULL,
[JobTitle]          VARCHAR (100) CONSTRAINT [DF_Employee_JobTitle] DEFAULT ('') NOT NULL,
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED ([EmployeeID] ASC),
CONSTRAINT [FK_Employee_Employee] FOREIGN KEY ([EmployeeIDManager]) REFERENCES [dbo].[Employee] ([EmployeeID]),
CONSTRAINT [FK_Employee_EmployeeTeam] FOREIGN KEY ([EmployeeTeamID]) REFERENCES [dbo].[EmployeeTeam] ([EmployeeTeamID]),
CONSTRAINT [FK_Employee_EmployeeType] FOREIGN KEY ([EmployeeTypeID]) REFERENCES [dbo].[EmployeeType] ([EmployeeTypeID])
);


GO
CREATE NONCLUSTERED INDEX [IX_Employee_Surname]
ON [dbo].[Employee]([Surname] ASC);


GO

CREATE TABLE [dbo].[AuditItem](
[AuditItemID] [INT] IDENTITY(1,1) NOT NULL,
[ID] [INT] NOT NULL,
[AuditEntityID] [INT] NOT NULL,
[AuditTypeID] [INT] NOT NULL,
[Note] [VARCHAR](MAX) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = DETERMINISTIC, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[Created] [DATETIME] NOT NULL,
[OperatorIDCreated] [INT] NOT NULL,
[ProfessionalIDCreated] [INT] NULL,
 CONSTRAINT [PK_AuditItem] PRIMARY KEY CLUSTERED 
(
[AuditItemID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

    ALTER Trigger  [dbo].[tr_Employee_Update] ON [dbo].[Employee] 
FOR UPDATE

AS

--Audit Entity ID for Employees
Declare @AuditEntityID int
set @AuditEntityID = 2

Insert AuditItem
    (ID,AuditEntityID,AuditTypeID, Note, Created, OperatorIDCreated)
Select
    inserted.EmployeeID,
    @AuditEntityID,
    --Update type
    2,
    'Name changed from ' + ltrim(rtrim(ltrim(rtrim(Deleted.Title)) + ' ' + ltrim(rtrim(Deleted.Forename)) + ' ' + ltrim(rtrim(Deleted.Surname)))) + ' to ' + + ltrim(rtrim(ltrim(rtrim(Inserted.Title)) + ' ' + ltrim(rtrim(Inserted.Forename)) + ' ' + ltrim(rtrim(Inserted.Surname)))),
    GetDate(),
    inserted.OperatorIDUpdated
From inserted
        Inner Join deleted on inserted.EmployeeID = deleted.EmployeeID
Where deleted.Title <> inserted.Title or deleted.Forename <> inserted.Forename or deleted.Surname <> inserted.Surname
创建表[dbo].[Employee](
[EmployeeID]整数标识(1,1)不为空,
[EmployeeTypeID]INT不为空,
[标题]VARCHAR(50)不为空,
[Forename]VARCHAR(30)不为空,
[姓氏]VARCHAR(30)非空,
[AddressLine1]VARCHAR(60)不为空,
[AddressLine2]VARCHAR(60)不为空,
[AddressLine3]VARCHAR(60)不为空,
[AddressLine4]VARCHAR(60)不为空,
[Town]VARCHAR(50)不为空,
[County]VARCHAR(50)不为空,
[邮政编码]VARCHAR(20)不为空,
[Phone]VARCHAR(20)约束[DF_Employee_Phone]默认值(“”)不为空,
[Mobile]VARCHAR(20)不为空,
[传真]VARCHAR(20)不为空,
[电子邮件]VARCHAR(50)不为空,
[Extension]VARCHAR(10)约束[DF_Employee_Extension_1]默认值(“”)不为空,
[SpeedDial]VARCHAR(10)约束[DF_Employee_SpeedDial_1]默认值(“”)不为空,
[注意]VARCHAR(最大值)不为空,
[EmployeeTeamID]INT NULL,
[Created]日期时间约束[DF_Employee_Created]默认值(getdate())不为空,
[OperatorIDCreated]INT不为空,
[Update]日期时间约束[DF_Employee_Update]默认值(getdate())不为空,
[OperatorIDUpdated]整型不为空,
[Deleted]位约束[DF_Employee_Deleted]默认值((0))不为空,
[EmployeeIDManager]INT NULL,
[JobTitle]VARCHAR(100)约束[DF_Employee_JobTitle]默认值(“”)不为空,
约束[PK_Employee]主键群集([EmployeeID]ASC),
约束[FK_Employee_Employee]外键([EmployeeID Manager])引用[dbo].[Employee]([EmployeeID]),
约束[FK_Employee_EmployeeTeam]外键([EmployeeTeamID])引用[dbo]。[EmployeeTeam]([EmployeeTeamID]),
约束[FK_Employee_EmployeeType]外键([EmployeeTypeID])引用[dbo]。[EmployeeType]([EmployeeTypeID])
);
去
创建非聚集索引[IX_员工_姓氏]
在[dbo].[Employee]([姓氏]ASC)上;
去
创建表[dbo]。[dbo](
[AuditItemID][INT]标识(1,1)不为空,
[ID][INT]不为空,
[AuditEntityID][INT]不为空,
[AuditTypeID][INT]不为空,
[注][VARCHAR](MAX)校对拉丁1_General_BIN2加密(列加密密钥=[CEK_Auto1],加密类型=确定性,算法='AEAD_AES_256_CBC_HMAC_SHA_256')非空,
[已创建][日期时间]不为空,
[OperatorIDCreated][INT]不为空,
[ProfessionalIDCreated][INT]NULL,
约束[PK_AuditItem]主键群集
(
[听力ID]ASC
)在[主]上打开(PAD\u INDEX=OFF,STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON)
)在[PRIMARY]文本上图像在[PRIMARY]上
去
在[dbo].[Employee]上更改触发器[dbo].[tr\U Employee\U Update]
更新
作为
--员工的审核实体ID
声明@AuditEntityID int
设置@AuditEntityID=2
插入听力项目
(ID、AuditEntityID、AuditTypeID、注释、已创建、运算符已创建)
挑选
插入.EmployeeID,
@AuditEntityID,
--更新类型
2.
'名称从'+ltrim(rtrim(rtrim(Deleted.Title))+''+ltrim(rtrim(Deleted.forname))+''+ltrim(rtrim(Deleted.Name)))+'更改为'+ltrim(rtrim(rtrim(Inserted.Title))+''+ltrim(rtrim(Inserted.forname))+''+ltrim(rtrim(Inserted.姓氏)))),
GetDate(),
插入。运算符重复日期
从插入
插入时删除内部联接。EmployeeID=已删除。EmployeeID
其中已删除。插入标题。插入标题或已删除。插入名字。插入名字或已删除。插入姓氏。姓氏

今天对此进行了大量研究之后,不幸的是,无论数据类型如何,触发器都不支持更新加密列。因此,遇到此问题并遇到相同问题的任何人都需要通过存储过程完成更新,但需要通过applicat调用它们离子密码


虽然上面我的问题中的两个链接问题没有直接解决我的问题或帮助我,但如果需要将参数化值传递给存储过程并出现问题,您可能需要按照问题中的答案进行操作。

代表Youfah Mizzum-当您更改表时,请尝试在