sql 根據多個ID刪除表中多行數據


以下為刪除記錄的存儲過程,此刪除為邏輯刪除,只是將記錄的狀態字段state改為'2'了,正常為'1'

/*
*****************************************************************************
*根據ID刪除黑名單表中記錄信息
*****************************************************************************
*/
CREATE PROCEDURE [dbo].[P_DelBlackListByID_sp]
@IDList nvarchar(2000)
AS
DECLARE @Len int
DECLARE @id varchar(30)
SELECT @Len = DATALENGTH(@idList)
WHILE @Len> 0
BEGIN
EXECUTE @Len = GetFirstWordWithSeparator_sp @idList OUTPUT, @id OUTPUT,','
IF @Len > 0
BEGIN
update BlackList_tb set [state]='2' WHERE BlackListID=cast(@id as int)
END
End

以上存儲過程調用了下面的存儲過程

CREATE PROCEDURE [dbo].[GetFirstWordWithSeparator_sp]
@SourceString nvarchar(4000) = NULL OUTPUT,
@FirstWord nvarchar(4000) = NULL OUTPUT,
@Separator nvarchar(20)
AS
SET NOCOUNT ON
DECLARE @Oldword nvarchar(4000)
DECLARE @Length int
DECLARE @CommaLocation int
SELECT @Oldword = @SourceString
IF NOT @Oldword IS NULL
BEGIN
SELECT @CommaLocation = CHARINDEX(@Separator,@Oldword)
SELECT @Length = DATALENGTH(@Oldword)
IF @CommaLocation = 0
BEGIN
SELECT @FirstWord = @Oldword
SELECT @SourceString = NULL
RETURN @Length
END
SELECT @FirstWord = SUBSTRING(@Oldword, 1, @CommaLocation -1)
SELECT @SourceString = SUBSTRING(@Oldword, @CommaLocation + LEN(@Separator), @Length - @CommaLocation)
RETURN @Length - @CommaLocation
END
RETURN 0

這樣就可以一次性向數據庫傳遞一個字符串id集合對數據進行操作了,這樣做可以不用in關鍵字。
PS:我的淘寶店鋪新開業,經營各種桌游,棋牌,希望大伙兒能來看看!http://201314yes.taobao.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM