Хранимая процедура SQL - внутреннее использование параметров - PullRequest
0 голосов
/ 12 августа 2011

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

    ALTER PROCEDURE [dbo].[_sp_TestProc]    
    @P1 As [dbo].[FileIdTableType] Readonly,
    @P2 As NVARCHAR (MAX)

AS
BEGIN   
    SET NOCOUNT ON;
    SELECT DISTINCT [Field1], [Field2], [Field3]
      FROM [MyTable] WHERE [Field1] IN (@P1)
      AND [Field2] IN (@P2)

END

Из кода я передаю свой DataTable как @ P1 и строку значений как @ P2, которая выглядит как "'Value1', 'Value2', 'Value3', 'Value4'"

Это @P2, который вызывает у меня проблемы.Тип таблицы работает отлично.Обычно при использовании таких параметров в моих хранимых процессах я создаю строку внутри, форматирую строку с параметрами, затем вызываю sp_executeSql для запуска запроса.Тем не менее, это не будет работать при использовании табличных параметров.

Кто-нибудь знает, как работать с табличными параметрами наряду с nvarchar, как это?Я уверен, что упускаю что-то простое, когда пытаюсь правильно отформатировать это.Спасибо,

-Скотт

1 Ответ

1 голос
/ 12 августа 2011

Сначала вам нужно разобрать @ P2 во временную таблицу или таблицу var. Вы не можете использовать оператор IN с одной строкой, которая перечисляет количество значений.

См. этот ТАК вопрос .

...