SQL 預存程序 通過多個ID更新資料,sql預存程序
下面舉個例子說明:
我想讓一部分品牌的名稱(即Brand_Name)後面加上1,Brand_ID是主鍵,sql語句很容易實現,但是預存程序如何寫呢?
錯誤寫法如下:
//************************************************
ALTER PROC [dbo].[預存程序名]
@Brand_IDs varchar(max)
AS
BEGIN
UPDATE T_System_Brand
SET
Brand_Name=Brand_Name+'1'
WHERE Brand_ID IN (@Brand_IDs)
END
//**************************************************
正確的寫法(分兩步):
第一步:
在資料中 可程式化行->函數->表值函數 中添加一個函數,具體如下:
ALTER FUNCTION [dbo].[Split]
(
@c VARCHAR(MAX) ,
@split VARCHAR(50)
)
RETURNS @t TABLE ( col VARCHAR(50) )
AS
BEGIN
WHILE ( CHARINDEX(@split, @c) <> 0 )
BEGIN
INSERT @t( col )
VALUES ( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1) )
SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), '')
END
INSERT @t( col ) VALUES ( @c )
RETURN
END
第二步:
在預存程序中可以這樣寫:
ALTER PROC [dbo].[預存程序名]
@Brand_IDs varchar(max)
AS
BEGIN
UPDATE T_System_Brand
SET
Brand_Name=Brand_Name+'1'
WHERE Brand_ID IN ( SELECT * FROM Split(@Brand_IDs , ','))
END
備忘:我把表值函數: