2014-12-17 3 views
3

Возможно ли получить несколько значений столбцов, когда у нас есть имя столбца в виде строки Как и в случае, если у меня есть таблица Test, и у меня есть столбцы FirstName , LastName , Address.Получить значение столбца из имени столбца строки sql

Теперь то, что я хочу, чтобы получить значение всех трех столбцов, но я хочу, чтобы сделать эту динамику, так что я просто передать имя строки столбца Я получаю значение, что столбцы

Пример

Select 

(select column_name from metadata) 

from source table 
+2

Вашего вопроса не ясно, вы можете добавить пример? –

ответ

5

Передайте имена столбцов в качестве параметров

DECLARE @COLS NVARCHAR(MAX) 
DECLARE @TABLE NVARCHAR(MAX) 
SET @COLS = 'COL1,COL2' 
SET @TABLE = 'TABLENAME' 

Теперь выполнить запрос

DECLARE @QRY NVARCHAR(MAX) 
SET @QRY = 'SELECT (SELECT '[email protected]+' FROM '[email protected]+') FROM sourcetable' 
EXEC SP_EXECUTESQL @QRY 
+0

да, спасибо alot – Ancient

1

Вы можете построить запрос в коде динамически. Однако он должен быть надежным, чтобы он не подвержен инъекции SQL. Что-то вроде этого:

string commandString = "select {0} from SomeTable"; 
SqlCommand command = new SqlCommand(); 
command.CommandText = string.Format(commandString, "selected column names"); 
command.EndExecuteReader(); 

В SQL:

declare @query nvarchar(500) 

set @query = replace('select 0 from author','0','column names from some parameter') 

execute sp_executesql @query 

Update 2: Означает ли это делать то, что вам нужно?

declare @query nvarchar(500) 
DECLARE @columnNames varchar(1000) 

set @columnNames = '' 
SELECT @columnNames = @columnNames + column_name + ',' FROM metadata 
set @query = replace('select 0 from source_table','0',SUBSTRING(@columnNames,0,LEN(@columnNames)-1)) 

execute sp_executesql @query 
+0

Я хочу сделать это в t-sql – Ancient

+0

Откуда бы вы передавали имена столбцов SQL? – danish

+0

из подзапроса – Ancient

Смежные вопросы