2015-04-15 1 views
-1

Я пытаюсь создать несколько запросов, передающих имя столбца динамически, но по какой-то причине возвращает имя столбца, а не значение. Я не очень хорошо знаком с этой техникой, потому что теперь @cmd пуст, потому что перед тем, как писать динамический запрос, я хотел бы убедиться, что передам правильные параметры. Другими словами, я хочу напечатать значение, которое находится в столбце A1.Динамический SQL-запрос возвращает имя столбца вместо значения

Может ли кто-нибудь рассказать или направить меня, чтобы получить значение вместо этого? Буду признателен за любую помощь.

HubFinal

id Cart  PO    A1    A1E 
    ---------------------------------------------------------- 
    01 Cart1  24432  upc1,1/25/2016,1  Available 
    ----------------------------------------------------------- 
    02 Cart2  24888  upc10,1/25/2030,1  No Available 

Запрос

WHILE (@i <= 1) 
BEGIN 

-- get Column Name Example A1 
    SET @Compartment = (SELECT compartment FROM @Compartment_table WHERE idx = @i); 

-- get data from HUBFINAL to insert into HUBTEMP 
    SET @PO = (Select PO FROM HubFinal Where CartPlate [email protected]); 

-- pass dynamically the comlumn name, in this case A1 
    SET @CompValue = (Select @Compartment From HubFinal Where CartPlate [email protected]); 


Print @Compartment 
Print @PO 
Print @CompValue 



--insert to final table 
     Declare @cmd nvarchar(4000) = 
       -- do something with values gotten above 
     EXEC(@cmd) 


-- increment counter for next compartment 
    SET @i = @i + 1 

END 

Выход

-- this is what is printed 

    A1 
    24432 
    A1 
+1

Как мы могли возможно помочь, не зная действительный динамический запрос SQL ?. Во всяком случае, попробуйте напечатать '@ cmd', вы должны увидеть, почему вы получаете результаты, которые вы получаете – Lamak

+0

Привет, Ламак, я не очень хорошо знаком с этой техникой, потому что теперь @cmd пуст, потому что перед тем, как написать динамический запрос, который мне нужен чтобы убедиться, что я передам правильные параметры. Другими словами, я хочу напечатать значение, которое находится в столбце A1. – Carlos

+1

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

ответ

0

в @Sean Ланге сказал вам ... Это не рекомендуется цикла в SQL сервере, как он попал в (вы должны найти другой способ решить вашу проблему), но если вы хотите получить значение имени динамического столбца Вы можете сделать это, что

как я не знаю, типа данных, с которыми вы работаете, я предполагаю, что это NVARCHAR

DECLARE @value NVARCHAR(MAX); 
SET @CompValue = CONVERT(NVARCHAR(MAX), 'Select @val='+ @Compartment + ' From HubFinal Where CartPlate = @CartPlate') 

EXECUTE sp_executesql @CompValue, N'@CartPlate NVARCHAR(MAX),@val NVARCHAR OUTPUT', @CartPlate = @CartPlate, @val= @value OUTPUT 

PRINT(@value) 
+0

Привет, Шериф Ахмед, спасибо за ваш ответ! Я попробовал ваше решение и печатаю это «Выберите A1 из HubFinal Where CartPlate = cart1' для @CompValue – Carlos

+0

проверить ответ, я отредактирую его –

+0

Большое вам спасибо! 'sp_executesql' сделал это. – Carlos