2016-12-08 5 views
-1

Ich habe ein Szenario, in dem ich eine dynamische SQL-Abfrage basierend auf Tabellenname ausführen muss.SQL Server: dynamische SQL-Abfrage zu Variable zuweisen und ausführen

Zum Beispiel habe ich eine Tabelle X

|**table name**| **Query**            | 
|--------------|------------------------------------------------------------| 
| A   |select ' [email protected]+ ' from '[email protected]+ @table_name | 

Also meine Abfrage sieht aus wie

Set @sql = (select query from X where table name [email protected]_name) 
Exec @sql 

die hier exec @sql nicht funktioniert. Irgendwelche Ideen, wie man diese dynamische SQL-Abfrage ausführt?

+0

Leider Struktur meines Tisches hätte vermasselt und ich bin nicht sicher, wie es zu korrigieren – Sam

+0

Verwendung 'control -k' oder fügen Sie 4 Leerzeichen zum Code-Format hinzu –

+0

Sie vermissen einen Konnektor zwischen "Tabelle" und "Name". –

Antwort

0

Haben Sie dies gerne möchten, Eigentlich müssen Sie zweimal dynamische Skript auszuführen. Zum ersten Mal den wirklich SQL-Skript zu bekommen, dann das Skript excute, die vor erzeugt, zum Beispiel:

DECLARE @servername NVARCHAR(100)='master.dbo.',@table_name Nvarchar(100)='spt_values',@somevariable1 NVARCHAR(100)='number' 
DECLARE @sql NVARCHAR(max),@query NVARCHAR(max) 
;WITH X(TableName,Query)AS(
     SELECT 'A', '''SELECT top 5 '' [email protected]+ '' from ''[email protected]+ @table_name+'' WHERE type=''''p''''''' 
) 
SELECT @query=X.Query FROM X WHERE X.TableName='A' 

SET @query=N'set @sql=(select '[email protected]+N')' 
exec sp_executesql @query,N'@sql nvarchar(max) out,@servername NVARCHAR(100),@table_name varchar(100),@somevariable1 NVARCHAR(100)' 
,@sql out,@servername ,@table_name,@somevariable1 
PRINT @sql  
EXEC(@sql) 
 
--Excute command result at first time: 
SELECT top 5 number from master.dbo.spt_values WHERE type='p' 
--- Execute below script: 

number 
----------- 
0 
1 
2 
3 
4 
+0

Genau das habe ich gesucht. Vielen Dank Nolan. Du hast viel Zeit für mich gespart. – Sam

0

Sie benötigen Schema angeben

https://msdn.microsoft.com/en-us/library/ms174979.aspx

CREATE TABLE 
    [ database_name . [ schema_name ] . | schema_name . ] table_name 
    ({ <column_definition> } [ ,...n ]) 
[ ; ] 

So Ihre Anfrage shoule sein:

'select ' + @somevariable1 + ' from ' + @servername + '.[dbo].' + @table_name 
+0

Danke Juan. Aber meine Frage betrifft nicht die Syntax der Abfrage. Die Syntax ist in Ordnung und funktioniert (leider habe ich nicht die gesamte Syntax hier gepostet). Meine Frage ist: set @sql = einige dynamische Abfrage – Sam

+0

Also, was ist das Problem? –

+0

Danke Juan, dass Sie sich das angesehen und das Format bearbeitet haben. Entschuldigung, ich konnte es nicht richtig erklären. – Sam

Verwandte Themen