2009-12-23 21 views
1

我特指存儲過程輸入參數的處理方式。它只是改變SQL Server解釋數據的方式,還是需要SQL Server製作數據的副本?在SQL Server中如何實現CAST(VARBINARY AS NVARCHAR)?

謝謝!

+1

如果它是文本,爲什麼它存儲爲VARBINARY? – 2009-12-23 21:53:45

+0

看到我對這個問題的答案:http://stackoverflow.com/questions/1928600/efficiently-adding-large-amounts-of-text-to-a-database/1931650#1931650 – Chris 2009-12-25 03:25:42

回答

1

每個NVARCHAR字符佔用2字節,所以SQL Server意志墊NVARCHAR大小最接近的較大的偶數:

WITH q AS 
     (
     SELECT CAST('qqq' AS VARBINARY) vb 
     ) 
SELECT DATALENGTH(CAST(vb AS NVARCHAR(20))) 
FROM q 

--- 
    4 

你是什麼意思「的數據副本」是什麼意思?這取決於執行計劃。即使沒有進行類型轉換,SQL Server也可以製作整個表的副本(例如,在Eager Spool中)。

+0

對不起,我應該澄清,具體指的是存儲過程參數。我已經更新了這個問題。 – Chris 2009-12-23 21:41:25

1

如果將@variableA分配給@variableB,則必須發生CAST的相關副本。

如果您在查詢中使用@variable,則事情會變得越來越模糊,並且複製是否發生取決於CAST的上下文。