我的任务是创建一个存储过程,该过程可以查看表格并拉出ObjectGUID
和extensionAttribute6
列并进行比较。
基本上objectGUID
是varbinary
列,extensionAttribute6
是nvarchar
列。我真正需要做的是提取extensionAttribute6
不为空的所有记录,然后取值objectGUID
并将其转换为base-64字符串值,并将该值与列中的值进行比较该记录的extensionAttribute6
。如果值匹配,则插入名为Compliance
(nvarchar(10)
)的计算列,并将True
放在那里,否则将false放在那里。
答案 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