下面举个例子说明:
我想让一部分品牌的名称(即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
备注:我把表值函数截图:
