2011-04-12 2 views
21

У меня есть Microsoft SQL хранимую процедуру, которой имя столбца Я хочу установить с помощью переменной, которая передается в него:SQL: Выберите динамическое имя столбца на основе переменной

CREATE PROCEDURE [My_Procedure] 
    @myDynamicColumn varchar(50) 
AS BEGIN 
    SELECT 'value' AS @myDynamicColumn 
END 

Это не работает ("Неправильный синтаксис «). Если я обернуть имя столбца с []:

SELECT 'value' AS [@myDynamicColumn] 

Имя столбца буквально выводит как «@myDynamicColumn» вместо фактического значения. Есть какой-либо способ сделать это? Я изучил динамические статьи SQL, но ничего не то, о чем я прошу.

+1

Почему? Это не то, как следует использовать SQL – gbn

+0

@gbn: справа. @dotNewkow: Я уверен, что это всего лишь надуманный пример, иллюстрирующий вашу проблему, но gbn верен: это сложно, потому что это неправильно. Если вам нужно получить псевдоним возврата из хранимой процедуры, просто выполните наложение псевдонимов в вызывающем коде, где вы, очевидно, уже знаете значение @myDynamicColumn. Если вы разместите более подробную информацию о своей проблеме, возможно, мы можем предложить больше, чем динамический sql. –

+0

Хороший вопрос. Да, я понимаю опасности динамического SQL. @Nathan Skerl, вы правы, обычно вы хотите установить это через код вызова. Тем не менее, я запускаю этот запрос в качестве подключения к данным в Excel для целей отчетности. Клиент хочет 4 отчета с относительно одинаковыми данными, но с разными именами столбцов, поэтому я сделал сохраненную процедуру для повторного использования и выполнил принцип DRY. Если бы это было представление, я мог бы сделать: «SELECT [column] AS [My Dynamic column name] FROM [My View]», но поскольку это хранимая процедура, я могу только «EXEC My_Procedure» «My Column Name». – dotNetkow

ответ

37
EXEC ('SELECT ''value'' AS ' + @myDynamicColumn) 
+0

Спасибо, вы ответили через 45 секунд после другого парня, так что имейте upvote! – dotNetkow

+0

@dotNetkow: На самом деле, я был на 9 секунд раньше «другого парня», 15:49:30 против 15:49:39. –

+29

Всегда подружка невесты, никогда не невеста. – Josh

20

Вы можете создать свой запрос в строку и использовать Exec

CREATE PROCEDURE [My_Procedure] 
    @myDynamicColumn varchar(50) 
AS BEGIN 
    EXEC('SELECT ''value'' AS ' + @myDynamicColumn) 
END 
Смежные вопросы