Я имею в виду, как обрабатываются входные параметры хранимой процедуры. Это просто меняет то, как SQL Server интерпретирует данные, или требует, чтобы SQL Server сделал копию данных?
Спасибо!
Если вы назначите @variableA для @variableB, должна появиться копия, не относящаяся к CAST.
Если вы используете @variable в запросе, дела обстоят намного мрачнее, и от того, происходит ли копирование, зависит контекст CAST.
Каждый NVARCHAR символ занимает 2 байтов, поэтому SQL Server будет дополнять размер NVARCHAR ближайшим большим четным целым числом:
NVARCHAR
2
SQL Server
WITH q AS ( SELECT CAST('qqq' AS VARBINARY) vb ) SELECT DATALENGTH(CAST(vb AS NVARCHAR(20))) FROM q --- 4
Что вы подразумеваете под «копией данных»? Это зависит от плана выполнения. SQL Server может сделать копию всей таблицы (скажем, в Eager Spool) даже без приведения типов.
Eager Spool