2013-12-17 5 views
1

2 또는 3 또는 4 또는 'n'개의 사용자 이름에 대해 하나의 암호 값을 전달합니다.SQL의 열 값을 동적으로 업데이트 중

업데이트 쿼리에 user_id를 동적으로 전달하는 방법은 무엇입니까?

update user_table 
set column_password = 'password value' 
where user_id in () 
+0

저장 프로 시저 또는 다른 것입니까? – Joe

+0

해당 저장 프로 시저 – goofyui

+0

및이 값을 저장 프로 시저에 매개 변수에 걸쳐 어떻게오고 있습니까? @param의 예제 값은 무엇입니까? – Joe

답변

2

우선이 코드를 사용하여 함수를 만들 : 다음

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE FUNCTION [dbo].[SplitIDs] 
(
    @List varchar(5000) 
) 
RETURNS 
@ParsedList table 
(
    ID int 
) 
AS 
BEGIN 
    DECLARE @ID varchar(10), @Pos int 

    SET @List = LTRIM(RTRIM(@List))+ ',' 
    SET @Pos = CHARINDEX(',', @List, 1) 

    IF REPLACE(@List, ',', '') <> '' 
    BEGIN 
     WHILE @Pos > 0 
     BEGIN 
      SET @ID = LTRIM(RTRIM(LEFT(@List, @Pos - 1))) 
      IF @ID <> '' 
      BEGIN 
       INSERT INTO @ParsedList (ID) 
       VALUES (CAST(@ID AS int)) --Use Appropriate conversion 
      END 
      SET @List = RIGHT(@List, LEN(@List) - @Pos) 
      SET @Pos = CHARINDEX(',', @List, 1) 

     END 
    END 
    RETURN 
END 

GO 

당신의 저장 프로 시저 declate @UserIDs varchar(max)에. 쉼표로 구분 된 ID 목록을이 매개 변수로 전달합니다.

는 그런 다음 저장된 프로 시저에 당신은 할 수 있습니다 :

update U 
set U.column_password = 'password value' 
FROM dbo.SplitIDs(@UserIDs) I 
INNER JOIN user_table U ON I.ID=U.user_id 
+0

감사합니다. 함수에 대한 나의 이해는 입력 매개 변수 @List는 쉼표로 구분 된 값만 받아들입니다. – goofyui

+1

그래, 내 대답에서 말했듯이 : "쉼표로 구분 된 ID 목록을이 매개 변수로 전달합니다." subquery에서 – Dimitri

0

그냥 생각. 이미 스토어드 프로 시저에 있다면 select 문을 통해 user_id를 이미 사용할 수 있습니다. 나는 이런 것을 할 것입니다.

update user_table 
set column_password = 'password value' 
where user_id in (select user_id from table 
where criteria = '') 
+0

을 언급하면 ​​user_id가 언급됩니다. 내 시나리오에서는 user_id가 동적으로 전달됩니다. number of user_id가 변경됩니다. – goofyui

+0

안녕하세요. goofyui 명령문은 하위 쿼리가 선택하는 내용에 따라 1 백만에서 100 만 개까지의 숫자를 포함하여 모든 수의 user_ids를 처리합니다. 나는 당신이 뭔가 다른 것을 찾고 있을지도 모르겠지만, 내가 위에서 언급 한 것을 믿는다. –

1

CREATE FUNCTION [dbo].[FnSplit] 
(
@List nvarchar(2000), 
@SplitOn nvarchar(5) 
) 
RETURNS @RtnValue table (Id int identity(1,1), Value nvarchar(100)) 
AS 
BEGIN 

While(Charindex(@SplitOn,@List)>0) 

    Begin 


     Insert Into @RtnValue (value) 

     Select Value = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1))) 

     Set @List = Substring(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List)) 

    End 


Insert Into @RtnValue (Value) 

Select Value = ltrim(rtrim(@List)) 

Return 

END 

저장 프로 시저

CREATE Procedure usp_Multipleparameter (@Users VARCHAR(1000)= NULL) 
AS 
BEGIN 

     update user_table 
     set column_password = 'password value' 
     where user_id collate database_default IN (SELECT Value FROM dbo.FnSplit(@Users,',')) 

END 
GO 

EXEC usp_Multipleparameter 'User1,User2' 
저장 프로 시저를 호출하는 기능을 CREATE
+0

감사합니다 @MuhammedAli – goofyui

+0

Tesco가 "Every Little Helps"라고 말하면서 문제는 없습니다 :) –