2013-09-29 3 views
0

S'il vous plaît voir le SQL ci-dessous:chaînes de concaténer Dynamic 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) 

Le jeu de résultats apparaît dans deux colonnes et à savoir le nom. Prenom Est-il possible de concaténer les colonnes pour que la sortie apparaisse comme ça?

Ian,McFearce 
Jane,McAndrew 

J'ai trouvé un devis sur ce site: http://technet.microsoft.com/en-us/library/ms188001.aspx, qui stipule: « concaténer deux chaînes avec l'opérateur +, ne sont pas autorisés ». Par conséquent, je pense que ce n'est pas possible. Y at-il un travail autour.

+0

ur sql doit être sélectionné nom + ',' + nom de la personne – mhn

+0

D'où vient @ TableName? Pourquoi votre système est-il conçu de sorte que les utilisateurs puissent choisir des colonnes dans n'importe quelle table? –

+0

@Aaron Bertrand, le système recherche un certain nombre de bases de données locales, qui ont des schémas différents. Cela a-t-il du sens? – w0051977

Répondre

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

Merci pour ce +1. Pouvez-vous commenter la citation de la webstie, c'est-à-dire "concaténer deux chaînes avec l'opérateur +, n'est pas autorisé". – w0051977

+0

Je suppose que cela signifie que vous ne pouvez pas avoir quelque chose comme Exec (@ SQL + @ WhereClause). @stmt devrait être une constante unicode ou une variable unicode – mhn

+0

Enfin, pensez-vous que cette approche devrait être désapprouvée en raison des risques d'injection SQL? – w0051977