Вставить во временную таблицу с помощью оператора CASE - PullRequest
1 голос
/ 16 февраля 2011

Мне нужно создать и заполнить временную таблицу в начале хранимой процедуры. Мне нужно заполнить таблицу одним из двух способов в зависимости от того, равен ли параметр, переданный хранимой процедуре, NULL или нет.

Я хочу сделать ниже псевдо-SQL. FnSplit - это пользовательская функция, которая разбивает строку на символ «,» и возвращает таблицу ([Value] nvarchar (4000)).

     DECLARE @ids varchar(max)

     DECLARE @orders TABLE 
     ( 
         ProductID int,
         BrandID int
     )

     IF ISNULL(@ids)
         INSERT INTO @orders
         SELECT 
              PO.ProductID,
              PO.BrandID
         FROM dbo.ProductOrders PO 
     ELSE
         INSERT INTO @orders
         SELECT 
             PO.ProductID,
             PO.BrandID
         FROM fnSplit( @ids, ',')
         JOIN dbo.ProductOrders PO on Value = PO.ID
     END

Как я могу достичь вышеизложенного с помощью vaid SQL? Возможно, используя оператор CASE? Обратите внимание, что основная логика хранимой процедуры следует за этим блоком и использует таблицу @orders.

1 Ответ

2 голосов
/ 16 февраля 2011

Ты довольно близко

IF @ids IS NULL
BEGIN 
     INSERT INTO @orders
     SELECT 
          PO.ProductID,
          PO.BrandID
     FROM dbo.ProductOrders PO 
END ELSE BEGIN
     INSERT INTO @orders
     SELECT 
         PO.ProductID,
         PO.BrandID
     FROM fnSplit( @ids, ',')
     JOIN dbo.ProductOrders PO on Value = PO.ID
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...