Нужна помощь подстановки переменных в SQL - PullRequest
1 голос
/ 02 августа 2010

Есть ли способ передать значение переменной комбинации в другую переменную?Я думаю, лучше с простым кодом, который я написал ...

DECLARE @intFlag INT  
DECLARE  @taxdepn1 varchar(1) = 'A' 
    ,@taxdepn2 varchar(1) = 'B' 
    ,@taxdepn3 varchar(1) = 'C' 
    ,@taxdepn4 varchar(1) = null --'D' `
DECLARE @xxx varchar(1000);
SET @intFlag = 1
WHILE (@intFlag <=4)
BEGIN
    set @xxx = '@taxdepn'+cast(@intFlag as CHAR) ; 
    -- Here, I want to get the actual value of @Taxdepn1 to @TaxDepn4
    if @xxx is not null  
        begin
            print 'do something for '+@xxx
    end 
    set @intFlag = @intFlag+1 ;
End

Expected output  
    do something for A  
    do something for B  
    do something for C  

Я действительно ценю любую помощь.

Спасибо.
Elmer

Ответы [ 2 ]

1 голос
/ 02 августа 2010

Использование sp_executesql, но довольно громоздко. @ Taxdepn1 ... @ taxdepn4 должны быть переданы в качестве аргументов, и динамический sql может затем использовать их для выполнения оперативной оценки, возвращая значение, присвоенное выходному параметру:

while (@intFlag <= 4)
begin
  declare @sql nvarchar(max);
  set @sql = N'set @out = @in' + cast(@intFlag as nchar);
  declare @xxx char(1);
  exec sp_executesql @sql, 
      N'@in1 char(1), @in2 char(1), @in3 char(1), @in4 char(1), @out char(1) output',
      @taxdepn1, @taxdepn2, @taxdepn3, @taxdepn4, @xxx output;
  if @xxx is not null
  begin
    ...
  end
  set @intFlag += 1;
end
1 голос
/ 02 августа 2010

Чтобы сделать то, что вы пытаетесь, вам нужно использовать динамический SQL.Вот альтернатива, которая не требует динамического SQL, но вы статически определяете ссылку, которую хотите сделать:

WHILE (@intFlag <=4)
BEGIN    

    SET @xxx = CASE @intFlag
                        WHEN 1 THEN @taxdepn1
                        WHEN 2 THEN @taxdepn2
                        WHEN 3 THEN @taxdepn3
                        ELSE @taxdepn4
                     END

    IF @xxx IS NOT NULL 
    BEGIN
      PRINT @xxx
    END

END 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...