我有一個存儲過程,我將一個文檔ID字符串傳遞給它,並且它應該刪除其中的roleID = @roleID的documentID,但相反它會刪除所有記錄根據該角色ID和所有我想要做的就是基礎上刪除該角色ID從表中documentIDs從臨時表中刪除記錄時將被刪除的所有記錄
我的SP是
ALTER PROCEDURE sp_RemoveDocumentIDsFromRole
(
@roleID int,
@group_name varchar(50),
@DocumentIDString varchar(500),
@group_display_name varchar(50)
)
as
UPDATE [master_groups]
set group_name = @group_name, @group_display_name = @group_display_name
where roleID = @roleID
-- Creating Variables
DECLARE @numberLength int
DECLARE @numberCount int
DECLARE @TheDocumentIDs VarChar(500)
DECLARE @sTemp VarChar(100) -- to hold single characters
-- Creating a temp table
DECLARE @T TABLE
(
TheDocumentIDs VarChar(500)
)
--Initializing Variables for counting
SET @numberLength = LEN (@DocumentIDString)
SET @numberCount = 1
SET @TheDocumentIDs = ''
--Start looping through the keyword ids
WHILE (@numberCount <= @numberLength)
BEGIN
SET @sTemp = SUBSTRING (@DocumentIDString, @numberCount, 1)
IF (@sTemp = ',')
BEGIN
INSERT @T(TheDocumentIDs) VALUES (@TheDocumentIDs)
SET @TheDocumentIDs = ''
END
IF (@sTemp <> ',')
BEGIN
SET @TheDocumentIDs = @TheDocumentIDs + @sTemp
END
SET @numberCount = @numberCount + 1
END
declare @rLevel int
set @rLevel = 0
delete from [master_group_document_relations] where exists(select documentID = @TheDocumentIDs from @T) and roleID = @roleID
UPDATE:樣本數據
@ EmmadKareem,我很確定它的正確性,它從臨時表中選擇id並且應該這樣做刪除它們。我使用相同的方式插入臨時表的ID到表 – Chris 2014-11-24 06:54:43
一個問題和一個建議。問:你能否提供關於輸入DocumentIDString的例子,以及關於表T的內容的處理?建議:避免使用「sp_」作爲存儲過程的前綴。 「sp_」也被用作Microsoft SQL Server內置存儲過程的前綴,並且這是一個禁止(如果感興趣,可以通過在聯機叢書上搜索來確認這一點)。 – 2014-11-24 07:01:07
@EduardUta,是的,我犯了與sp_前綴,我已經意識到這是一個禁止,但它的測試,直到我準備清理代碼.. DocumentIDString看起來像123,234,321等。 .. – Chris 2014-11-24 07:06:12