INSERT语句不允许我使用IF NOT EXISTS

时间:2011-09-30 20:04:57

标签: asp.net sql vb.net sql-server-2005

我有一个插入声明,我无法以我想要的方式工作。它在vb.net页面上。这是在VB.net页面上,我正在使用SQL Server 2005作为我的数据库。

Dim strSQL As String = "IF NOT EXISTS
(SELECT Title From Picklist) 
BEGIN INSERT INTO Picklist (Title, Data) 
VALUES (@Title, @Data);

INSERT INTO Marketing 
(ProductID, MarketingTypeID, MarketingTitle, MarketingData) 
VALUES (@ProductID, 9, 'Video', scope_identity()) END"

我没有收到错误,也没有任何内容插入到数据库中。如果我尝试将END放在第一个INSERT语句的末尾,那么我会收到一条错误消息,指出MarketingData为NULL并且无法插入。

但如果我从声明中取出IF NOT EXISTS,那么一切都会完美插入。我在这里做错了什么?

UPDATE:写这样的语句是否正确?

INSERT INTO Marketing
SELECT (@ProductID, @MarketingTypeID, @MarketingTitle, @MarketingData)
WHERE NOT EXISTS
(SELECT * FROM Marketing)

1 个答案:

答案 0 :(得分:4)

如果IF NOT EXISTS(SELECT * FROM Picklist)中存在任何行,则Picklist将跳过插入内容。

根据您对更改END位置时所发生情况的描述,表中似乎有行。

我认为你实际上是在尝试UPSERT。您使用的是哪个版本的SQL Server?如果2008年进入MERGE

;WITH Source(Title, Data) AS
(
SELECT @Title, @Data
)
MERGE Picklist AS T
USING Source S
ON (T.Title = S.Title)


WHEN NOT MATCHED BY TARGET THEN
    INSERT (Title, Data)
    VALUES (@Title, @Data)
    ;

IF (@@ROWCOUNT <> 0)
INSERT INTO Marketing 
            (ProductID, MarketingTypeID, MarketingTitle, MarketingData) 
     VALUES (@ProductID, 9, 'Video', scope_identity())