我有一个插入声明,我无法以我想要的方式工作。它在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)
答案 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())