SQL Server存储过程将varbinary转换为Base64String

时间:2015-09-21 16:31:14

标签: sql stored-procedures sql-server-2012

我的任务是创建一个存储过程,该过程可以查看表格并拉出ObjectGUIDextensionAttribute6列并进行比较。

基本上objectGUIDvarbinary列,extensionAttribute6nvarchar列。我真正需要做的是提取extensionAttribute6不为空的所有记录,然后取值objectGUID并将其转换为base-64字符串值,并将该值与列中的值进行比较该记录的extensionAttribute6。如果值匹配,则插入名为Compliancenvarchar(10))的计算列,并将True放在那里,否则将false放在那里。

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用XML获取Base64

获取decoded(objectGUID) = extensionAttribute6

的记录
SELECT *
FROM your_tab
WHERE extensionAttribute6 IS NOT NULL
  AND CAST(CAST('' as XML).value('xs:base64Binary(sql:column("objectGUID"))', 'VARBINARY(MAX)') AS NVARCHAR(MAX)) = extensionAttribute6

并更新:

UPDATE your_tab
SET Compliance = IIF(CAST(CAST('' as XML).value('xs:base64Binary(sql:column("objectGUID"))', 'VARBINARY(MAX)') AS NVARCHAR(MAX)) = extensionAttribute6, 'True', 'False')

对于存储True/False,您应该使用BIT数据类型而不是字符串。

修改

SELECT *
   [Compliance] = IIF(CAST(CAST('' as XML).value('xs:base64Binary(sql:column("objectGUID"))', 'VARBINARY(MAX)') AS NVARCHAR(MAX)) = extensionAttribute6, 'True', 'False')
FROM your_tab