1
我有一個簡單的存儲過程,看起來像這樣:插入語句存在使用其他數據
IF EXISTS (SELECT tag, campaignID as campaignID
FROM Tags_Campaign_Watchlist
WHERE tag IN (SELECT *
FROM dbo.splitstring (@tags)))
這返回的輸出:
我的目標是,在這聲明它在表中找到的任何匹配,將活動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
進行了調整,以原來的崗位包括SP – SBB
其餘@ SBB在您的插入語句中只從表Tags_Campaign_Watchlist中選擇了campaignID,您所需要的只是選擇語句中的campaignID和TagID。 –
我試過了,但它仍然沒有工作..它是否只獲得@lastID一次在最後或它爲每個插入抓住它? – SBB