在插入记录之前通过TVP迭代?

时间:2011-05-12 23:18:54

标签: tsql sql-server-2008 insertion table-valued-parameters

我想帮助编写以下内容:

我有SQL Server 2008 sproc,它接受两个整数值(@ ID1和@ ID2)和一个数据表/ TVP。

TVP表包含几个字段,即。标题和说明。

我想遍历TVP表并检查我的数据表tbl_Items中是否已存在Title或Description,其中@ ID1 = tbl_Items.ID1和@ ID2 = tbl_Items.ID2。

如果两者都不存在,则将@ ID1和ID2以及该TVP行的值插入tbl_Items。

感谢。

2 个答案:

答案 0 :(得分:1)

这样的东西?

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)

答案 1 :(得分:0)

要求似乎有点不清楚,但您应该可以使用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)