2013-01-09 95 views
0

在我的一個解決方案中,我使用了SQL Server的更改跟蹤功能。爲了區分實際應用程序和通過同步應用程序所做的更改,我們使用Change Context。現在,如我所知,這種變化上下文是varbinary類型(128)。比較SQL Server中的VARBINARY值/參數

在應用程序邏輯,我們創建了一個字節數組一些隨機字節被用作變化語境與當同步應用使得任何改變,它使用此變化語境。然後,當我們試圖讓這是由實際應用中所做的更改設置,與任何變化背景下,我們用下面的代碼片段在查詢

SELECT .... from .... WHERE (SYS_CHANGE_CONTEXT != @context OR SYS_CHANGE_CONTEXT IS NULL) 

這裏,@context是命令參數類型VARBINARY(128)將其添加到sqlcommand以獲取更改集。無論傳遞給命令的更改上下文如何,它仍會獲得所有更改。

是否有任何特殊的方法來比較VARBINARY值或將它們作爲參數發送?

回答

1

字面上回答你的問題,我敢肯定有特殊的方式來比較VARBINARY的 (特別是大型企業,如預先計算哈希作爲使用前相比),但常規的「=」操作符工作得很好:

declare @a varbinary(max) = 0x12345678; 
declare @b varbinary(max) = 0x12345678; 
declare @c varbinary(max) = 0x12345679; 
declare @d varbinary(max) = null; 
declare @e varbinary(max) = null; 

select iif(@a = @b, 1, 0) as AreEqual -- 1 
union all 
select iif(@a = @c, 1, 0) as AreEqual -- 0 
union all 
select iif(@a = @d or @a is null and @d is null, 1, 0) as AreEqual -- 0 
union all 
select iif(@d = @e or @d is null and @e is null, 1, 0) as AreEqual -- 1 

從C#實體框架它們顯示爲byte []。由於參數包含內存佔用,我不知道有什麼特別的要求。對於較大的(比你的例子)可以使用流(例如1,2