2013-09-29 5 views
0

Пожалуйста, смотрите ниже SQL:Динамический SQL конкатенации строк

declare @TableName VarChar(100) 
declare @field1 varchar(100) 
declare @field2 varchar(100) 
set @TableName = 'Person.Person' 
set @field1 = 'LastName' 
set @field2 = 'FirstName' 
Declare @SQL VarChar(1000) SELECT @SQL = 'SELECT ' + @field1 + ',' + @field2 + ' FROM ' 
SELECT @SQL = @SQL + @TableName 
Exec (@SQL) 

Результирующий набор появляется в двух столбцах т.е. Firstname и фамилия. Можно ли объединить столбцы, чтобы выход выглядел следующим образом?

Ian,McFearce 
Jane,McAndrew 

Я нашел цитату на этом сайте: http://technet.microsoft.com/en-us/library/ms188001.aspx, в котором говорится: «конкатенации двух строк с помощью оператора +, не допускаются». Поэтому я подозреваю, что это невозможно. Есть ли обходной путь.

+0

ur sql необходимо выбрать фамилию + ',' + имя от лица – mhn

+0

Откуда берется '@ TableName'? Почему ваша система разработана так, чтобы люди могли выбирать любые столбцы из любой таблицы? –

+0

@ Аарон Бертран, система ищет несколько локальных баз данных, которые имеют разные схемы. Имеет ли это смысл? – w0051977

ответ

2
declare @TableName VarChar(100) 
declare @field1 varchar(100) 
declare @field2 varchar(100) 
set @TableName = 'dbo.Person' 
set @field1 = 'LastName' 
set @field2 = 'FirstName' 
Declare @SQL VarChar(1000) SELECT @SQL = 'SELECT ' + @field1 + '+'',''+' + @field2 + ' FROM ' 
SELECT @SQL = @SQL + @TableName 
print @sql 
Exec (@SQL) 
+0

Спасибо за это +1. Можете ли вы прокомментировать цитату из веб-страницы, то есть «конкатенировать две строки с помощью оператора +, не разрешены». – w0051977

+0

Я предполагаю, что это означает, что вы не можете иметь что-то вроде Exec (@ SQL + @ WhereClause). @stmt должна быть константой константы unicode или unicode – mhn

+0

Наконец, как вы думаете, этот подход следует недооценивать из-за рисков SQL-инъекций? – w0051977

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