Sql server 创建一个过程,该过程将更新输入变量中所有ID的表记录

Sql server 创建一个过程,该过程将更新输入变量中所有ID的表记录,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我能够运行下面的查询 update tab_A set Analyzed=1 where id in (1,2,3,4) 现在我想通过一个存储过程来实现它,如下所示 create procedure mark @variable varchar(max) as begin update tab_A set Analyzed=1 where id in (@variable) end 如果没有更简单的方法,我必须创建函数 如果有人找到这个话题,需要同样的帮助,我就把

我能够运行下面的查询

update tab_A set Analyzed=1 where id in (1,2,3,4)
现在我想通过一个存储过程来实现它,如下所示

  create procedure mark
  @variable varchar(max)
  as
  begin
    update tab_A set Analyzed=1 where id in (@variable)
  end

如果没有更简单的方法,我必须创建函数 如果有人找到这个话题,需要同样的帮助,我就把它留在这里

ALTER FUNCTION [dbo].[fn_Split] (
  @p_str NTEXT,
  @p_del CHAR(1)
)
RETURNS @ret TABLE (item nvarchar(4000))
WITH SCHEMABINDING
AS
BEGIN
  DECLARE @l_n INT;
  DECLARE @l_pos INT;
  DECLARE @l_tmp NVARCHAR(2000);

  SET @l_pos = 1;
  SET @l_tmp = SUBSTRING(@p_str, @l_pos, 2000);
  SET @l_n = CHARINDEX(@p_del, @l_tmp);

  WHILE(ISNULL(@l_n, 0) != 0) BEGIN
      INSERT INTO @ret
        SELECT LTRIM(RTRIM(SUBSTRING(@l_tmp, 1, @l_n - 1)));
    SET @l_pos = @l_pos + @l_n;
    SET @l_tmp = SUBSTRING(@p_str, @l_pos, 2000);
    SET @l_n = CHARINDEX(@p_del, @l_tmp);
  END;

   IF(LTRIM(RTRIM(SUBSTRING(@p_str, @l_pos, (DATALENGTH(@p_str) / 2) - @l_pos + 1))) != '')
     INSERT INTO @ret
       SELECT LTRIM(RTRIM(SUBSTRING(@p_str, @l_pos, (DATALENGTH(@p_str) / 2) - @l_pos + 1)));

  RETURN;
END
试着这样做

  CREATE PROCEDURE mark
    @variable VARCHAR(max)
  AS
  BEGIN
    DECLARE @sql NVARCHAR(Max)
    SET @sql='update tab_A set Analyzed=1 where id IN ('''+Convert(NVARCHAR(max),@variable)+''') '
    EXEC (@sql)
  END

我真的不明白你在问什么…在你的过程中尝试下面的查询
  CREATE PROCEDURE mark
    @variable VARCHAR(max)
  AS
  BEGIN
    DECLARE @sql NVARCHAR(Max)
    SET @sql='update tab_A set Analyzed=1 where id IN ('''+Convert(NVARCHAR(max),@variable)+''') '
    EXEC (@sql)
  END