2017-02-01 1 views
-1

J'ai été en mesure d'exécuter la requête ci-dessous.Créer une procédure qui mettra à jour les enregistrements de table pour tous les ID entrant dans une variable d'entrée

update tab_A set Analyzed=1 where id in (1,2,3,4) 

Maintenant, je veux l'implémenter à travers une procédure stockée, quelque chose comme donné ci-dessous.

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

Je ne comprends vraiment pas ce que vous demandez ici ... – Option

Répondre

1
Declare @string Nvarchar(Max) 
Set @string='update tab_A set Analyzed=1 where id IN ('''+Convert(Nvarchar(100),@variable)+''') ' 

Print @string 
Exec (@string) 
+0

Essayez ci-dessous la requête dans votre procédure –

1

s'il n'y a pas moyen plus facile je dois créer la fonction si quelqu'un trouve ce sujet et ont besoin de la même aide que je laisse ici

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 
0

Essayez de faire cette

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