-1

我正在尝试将datetime列转换为varbinary(100),但没有任何运气。我的问题与Convert datetime to varbinary inside update query非常相似,但我仍然无法开发解决方案。

这是我的代码:

OPEN SYMMETRIC KEY SymKey_TheDate_SYMMETRIC
    DECRYPTION BY CERTIFICATE Certificate_TheDate_Encryption

UPDATE PROFILE_DATA 
SET A29_FDATE = EncryptByKey (Key_GUID('SymKey_TheDate_SYMMETRIC'), CONVERT(varbinary(100), A29_FDATE))
FROM PROFILE_DATA
GO

CLOSE SYMMETRIC KEY SymKey_TheDate_SYMMETRIC

这是我尝试从转换为时遇到A29_FDATEdatetime错误varbinary(100)

不允许从数据类型 varbinary 到 datetime2 的隐式转换。使用 CONVERT 函数运行此查询。

4

2 回答 2

0

重新阅读您的错误:

不允许从数据类型 varbinary 到 datetime2 的隐式转换。使用 CONVERT 函数运行此查询。

你得到一个varbinary值就好了。错误是将其转换为datetime2. 该语句将其转换为datetime2尝试将字段“A29_FDATE”设置为 varbinary 值时。我从字段名称假设它是一个 datetime2 字段。我认为您不能也不应该将其转换为 datetime2 字段。

如果您正在对表中的字段进行加密,则必须创建一个类型为 varbinary 的新列,可能A29_FVARBIN(yuck),并将其更新为查询结果。然后,您可以根据需要删除 A29_FDATE 字段。

于 2020-09-17T19:51:29.817 回答
0

您的错误不是datetimeto varbinary(100),而是varbinaryto datetime2。函数EncryptByKey()返回varbinary分配给日期字段的 a A29_FDATEEncryptByKey()如果您要尝试,输出需要显式转换。

就像是:

...
SET A29_FDATE = convert(datetime2(0), EncryptByKey(...))
...
于 2020-09-17T19:47:49.780 回答