2013-11-26 15 views
1

我有一個簡單的存儲過程,看起來像這樣:插入語句存在使用其他數據

IF EXISTS (SELECT tag, campaignID as campaignID 
     FROM Tags_Campaign_Watchlist 
     WHERE tag IN (SELECT * 
         FROM dbo.splitstring (@tags))) 

這返回的輸出:

enter image description here

我的目標是,在這聲明它在表中找到的任何匹配,將活動ID插入到名爲TableB的另一個表中,只是不確定如何在檢查其循環的字符串中的每個標記期間如何使其發生。

編輯

在那裏我做的插入語句的底部,我需要傳遞給它的@lastID從最初插入往上頂。這可能嗎?

如果我通過@tags ='房屋,汽車,卡車和最後一個插入1,2,3的地方,它將爲房屋以及1添加campaignID,然後將汽車的campaignID和2作爲ID。

  AS 
BEGIN 
    SET NOCOUNT ON; 
    BEGIN 
     INSERT INTO Tags_Accounts (data, dataType, dataLocation, tag, whoAdded, whenAdded) 
     SELECT @dbData, 
       @dbDataType, 
       @location, 
       Name, 
       @ntid, 
       GETDATE() 
     FROM dbo.splitstring (@tags); 

     DECLARE @lastID int 
     SET @lastID = SCOPE_IDENTITY() 

    END 
END 


--If one of the tags added is part of a campaign watchlist, add it to the watchlist data table. 
IF EXISTS (SELECT tag, campaignID as campaignID 
      FROM Tags_Campaign_Watchlist 
      WHERE tag IN (SELECT * 
          FROM dbo.splitstring (@tags))) 

     BEGIN 

      INSERT INTO Tags_Campaign_Watchlist_Data (campaignID, tagID) 
      SELECT campaignID 
      FROM Tags_Campaign_Watchlist 
        WHERE tag IN (SELECT * 
            FROM dbo.splitstring (@tags)) 

     END 

更新2

DECLARE @tags VARCHAR(MAX) 
DECLARE @lastID int 


SET @tags = 'bob,cat,carl,withdraw,awesome'; 
SET @lastID = '1'; 

BEGIN 
IF EXISTS (SELECT tag, campaignID as campaignID 
     FROM Tags_Campaign_Watchlist 
     WHERE tag IN (SELECT * 
         FROM dbo.splitstring (@tags))) 

     INSERT INTO Tags_Campaign_Watchlist_Data (campaignID, tagID) 
     (SELECT campaignID, @lastID 
     FROM Tags_Campaign_Watchlist 
       WHERE tag IN (SELECT * 
           FROM dbo.splitstring (@tags))) 

    END 

這將返回

消息515,級別16,狀態2,行14 無法將NULL值插入列 '標籤',表'local.dbo.Tags_Campaign_Watchlist_Data';列不允許有空值。 INSERT失敗。 該聲明已被終止。

我沒有在監視列表數據,僅僅指剛標籤識別和CAMPAIGNID列TAG

回答

1
INSERT INTO TableB (campaignID) 
SELECT campaignID 
FROM Tags_Campaign_Watchlist 
     WHERE tag IN (SELECT * 
         FROM dbo.splitstring (@tags)) 

更新爲編輯

--If one of the tags added is part of a campaign watchlist, add it to the watchlist data table. 
    IF EXISTS (SELECT * 
       FROM Tags_Campaign_Watchlist 
       WHERE tag IN (SELECT * 
           FROM dbo.splitstring (@tags))) 

      BEGIN 

       INSERT INTO Tags_Campaign_Watchlist_Data (campaignID, tagID) 
       SELECT campaignID, TagID 
       FROM Tags_Campaign_Watchlist 
         WHERE tag IN (SELECT * 
             FROM dbo.splitstring (@tags)) 

      END 
+0

進行了調整,以原來的崗位包括SP – SBB

+0

其餘@ SBB在您的插入語句中只從表Tags_Campaign_Watchlist中選擇了campaignID,您所需要的只是選擇語句中的campaignID和TagID。 –

+0

我試過了,但它仍然沒有工作..它是否只獲得@lastID一次在最後或它爲每個插入抓住它? – SBB