Использование динамического SQL для указания имени столбца путем добавления переменной в простой SQL-запрос - PullRequest
2 голосов
/ 19 августа 2011

sql 2005 / sql 2008

Declare @temp nvarchar(1000)

set @temp = 'ABC'


select col1,col2 from tableA

Наряду с запросом выбора, как добавить переменную в запрос выбора?

expected output :-

select col1,col2,@temp as [col3] from tableA

Где @temp указывает имя столбцав таблице А.

Ответы [ 2 ]

4 голосов
/ 19 августа 2011

Если вы пытаетесь задать имя столбца динамически, вы можете взглянуть на выполнение динамического sql. Тем не менее, вы должны сначала прочитать об опасностях этого подхода:

http://www.sommarskog.se/dynamic_sql.html

На этой странице приведен пример, в котором динамически указывается имя таблицы - вы можете изменить его, чтобы вместо него динамически указывалось имя столбца:

CREATE PROCEDURE general_select @tblname nvarchar(128),
                                @key     varchar(10),
                                @debug   bit = 0 AS
DECLARE @sql nvarchar(4000)
SET @sql = 'SELECT col1, col2, col3
            FROM dbo.' + quotename(@tblname) + '
            WHERE keycol = @key'
IF @debug = 1 PRINT @sql
EXEC sp_executesql @sql, N'@key varchar(10)', @key = @key

Например, если у вас есть таблица «MyTable» со столбцами «x», «y» и «z», она может выглядеть следующим образом:

DECLARE @columnName nvarchar(128)
DECLARE @sql nvarchar(4000)
set @columnName = 'z'

SET @sql = 'SELECT x, y, ' + @columnName + ' from MyTable'
EXEC sp_executesql @sql, N'@columnName varchar(128)', @columnName = @columnName
2 голосов
/ 19 августа 2011

Примерно так:

select col1,col2 from tableA WHERE col1 = @temp

Или это:

select col1,col2,@temp as col3 from tableA WHERE col1 = @temp

Или это:

select col1,col2,@temp as col3 from tableA

Или, если @temp - это имя столбца, возможно, вы ищете динамический запрос?

 SET @temp = 'select col1,col2, ' + @temp + ' as col3 from tableA'
 EXEC sp_executesql @temp

...

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