ewr212 发表于 2014-12-11 13:53:22

SQL 存储过程 通过多个ID更新数据

下面举个例子说明:
我想让一部分品牌的名称(即Brand_Name)后面加上1,Brand_ID是主键,sql语句很容易实现,但是存储过程如何写呢?
错误写法如下:
//************************************************
ALTER PROC .[存储过程名]
@Brand_IDs varchar(max)      
AS
BEGIN

      UPDATE T_System_Brand
                SET
                     Brand_Name=Brand_Name+'1'
                WHERE Brand_IDIN (@Brand_IDs)

END
//**************************************************
正确的写法(分两步):
第一步:
在数据中 可编程行->函数->表值函数 中添加一个函数,具体如下:
ALTER   FUNCTION .   
(   
@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 .[存储过程名]
@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

备注:我把表值函数截图:






页: [1]
查看完整版本: SQL 存储过程 通过多个ID更新数据