2009-12-23 5 views
1

Я специально ссылаюсь на то, как обрабатываются входные параметры хранимой процедуры. Просто ли он изменяет то, как SQL Server интерпретирует данные, или требуется ли SQL Server копировать данные?Как реализован CAST (VARBINARY AS NVARCHAR) в SQL Server?

Спасибо!

+1

Если это текст, то почему он хранится как VARBINARY? –

+0

См. Мой ответ на этот вопрос: http://stackoverflow.com/questions/1928600/efficiently-adding-large-amounts-of-text-to-a-database/1931650#1931650 – Chris

ответ

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

Извините, я должен уточнить, m, конкретно ссылаясь на параметры хранимой процедуры. Я обновил вопрос. – Chris

1

Если вы назначили @variableA на @variableB, должна произойти копия, имеющая отношение к CAST.

Если вы используете переменную @variable в запросе, все намного мутнее и происходит ли копия или нет, зависит от контекста CAST.

Смежные вопросы