2016-06-05 20 views
2

Als Beispiel unten (vielleicht nicht ein gutes Beispiel):SQL Server: Wie legt man einen Spaltennamen als Wert einer dynamischen Variable fest?

DECLARE @var1 VARCHAR(50) 
SET @var1 = (SELECT TOP(1) MiddleName FROM myTable) 

SELECT Name, SSN AS @var1 
FROM myTable 

Was ich versuche, mithilfe von AS-Anweisung in einer Variablen einen Wert zu tun (in diesem Fall den ersten MiddleName Wertes in der Tabelle es gesetzt myTable als SSN Spaltenname). Irgendwelche Ideen, wie das funktioniert?

+1

Sie sollten dynamisches SQL verwenden, es kann nicht mit reinem SQL durchgeführt werden. – sagi

+0

Ich bin mir nicht sicher, was Sie versuchen zu tun - Ist es zuweisen @ @ Var1 in einer SELECT-Anweisung, die auch eine Ergebnismenge (Impossible) zurückgibt oder eine Ergebnismenge, wo eine der Spalten Namen ist der Wert von '@ Var1' (auch unmöglich, zumindest unmöglich ohne dynamisches sql). Gibt es eine dritte Option? –

Antwort

3

Sie benötigen dynamisches SQL.

DECLARE @sqlText nvarchar(1000); 

DECLARE @var1 VARCHAR(50) 
SET @var1 = (SELECT TOP(1) MiddleName FROM myTable) 

SET @sqlText = N'SELECT Name, SSN AS ' + @var1 + ' FROM myTable' 
Exec (@sqlText) 
2

Wenn Sie das wirklich tun müssen, verwenden Sie exec() oder sp_executesql:

DECLARE @var1 VARCHAR(50); 
SET @var1 = (SELECT TOP(1) MiddleName FROM myTable); 

DECLARE @sql NVARCHAR(MAX); 
SET @sql = 'SELECT Name, SSN AS [@var1] FROM myTable'; 
SET @sql = REPLACE(@sql, '@var1', @var1); 

EXEC sp_executesql @sql; 
0

Try this:

DECLARE @var1 VARCHAR(50) 
    , @sql NVARCHAR(MAX) 
SET @var1 = (SELECT TOP (1) 
         MiddleName 
       FROM  myTable 
      ) 

SET @sql = N'SELECT Name, SSN' + ' ' + @var1 + 'FROM myTable' 

EXEC sys.sp_executesql @sql 

HINWEIS: - Denken Sie daran, vor dem @ mindestens einen Raum haben var1 .

Verwandte Themen