Итерация по TVP перед вставкой записей? - PullRequest
0 голосов
/ 13 мая 2011

Мне нужна помощь в написании следующего sproc:

У меня есть sproc SQL Server 2008, который принимает два целочисленных значения (@ ID1 и @ ID2) и таблицу данных / TVP.

Таблица TVP содержит несколько полей, т.е.Заголовок и описание.

Я хочу перебрать таблицу TVP и проверить, существует ли уже заголовок или описание в моей таблице данных, tbl_Items, где @ ID1 = tbl_Items.ID1 и @ ID2 = tbl_Items.ID2.

Если ничего не существует, вставьте значения @ ID1 и ID2 и строки TVP в tbl_Items.

Спасибо.

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Как то так?

INSERT INTO tbl_Items (ID1, ID2, Title, Description)
  SELECT
    @ID1, @ID2, TVP.Title, TVP.Description
  FROM
    @TVP AS TVP
  WHERE
    NOT EXISTS (SELECT * FROM tbl_Items AS I WHERE TVP.Title = I.Title AND TVP.Description = I.Description)
0 голосов
/ 13 мая 2011

Требование кажется несколько неясным, но вы должны иметь возможность использовать MERGE

;WITH Target As
(
SELECT * 
FROM tbl_Items 
WHERE ID1=@ID1 AND ID2=@ID2
)
MERGE 
    INTO Target
    USING @TVP AS Source
    ON Target.Title = Source.Title OR Target.Description = Source.Description
    WHEN NOT MATCHED 
        THEN INSERT  (ID1, ID2, Title, Description) 
              VALUES (@ID1, @ID2, Title, Description)
...