Это правильный способ использовать sp_executesql в хранимой процедуре? - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть огромная хранимая процедура, в которой я создаю SQL-оператор. В конце я создаю список параметров следующим образом:

Нужен ли @paramList и N перед ним ??

SELECT @paramList = '@param1 nvarchar(300),
              @param2 nvarchar(10),
          @param3 nvarchar(10),
          @param4 nvarchar(100),
          @param5 nvarchar(1000),
          @param6 nvarchar(1000),
          @param7 nvarchar(200),
          @param8 nvarchar(2000)’

Затем я вызываю sp_executesql так:

EXEC sp_executesql @sql, @paramList,
     @param1,@param2,@param3,@param4,
             @param5,@param6,@param7,@param8

где @sql - оператор, paramList - мой список параметров, а все остальные переменные - это параметры, которые я объявил в начале хранимой процедуры. Это правильный способ сделать это?

Ответы [ 2 ]

1 голос
/ 20 сентября 2009

Если строка не использует символы вне параметров сортировки базы данных, нотация N '' не требуется.

Вы не указали объявление @paramList. N '' будет полезно только в том случае, если оно объявлено NVARCHAR.

SQL-сервер автоматически выполняет преобразование между значениями VARCHAR и NVARCHAR (опять же в отношении сопоставления БД).

Итак, в вашем случае решение работает. «Правильный» способ - использовать NVARCHAR и N '', но в этом случае это не требуется.

1 голос
/ 16 сентября 2009

Да, это правильный путь. Вы можете передать '@param1 nvarchar(300), ..., @param8 nvarchar(2000)' непосредственно в sp_executesql, нет необходимости передавать его через @paramList. Кроме того, вторым аргументом sp_executesql является тип Unicode, так что вы, вероятно, делаете несколько дополнительных разговоров ascii-to-unicode. Вы могли бы сделать прямо:

EXEC sp_executesql @sql, 
     N'@param1 nvarchar(300),...,@param8 nvarchar(2000)', 
     @param1,...,@param8;

Лучше ли сохранять объявление списка параметров в самом вызове, потому что оно так тесно связано с фактическими передаваемыми параметрами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...