2016-04-15 8 views
-1

Wie würde ich eine Abfrage in einer anderen Abfrage in SQL Server ausführen?SQL Server: geschachtelte Abfragedatei

HINWEIS: Was ich mit Abfrage meine, ist die my_query_name.sql erstellt in SSMSSLN Projektlösung. So möchte ich my_query_name_1.sql innerhalb my_query_name_2.sql laufen lassen.

Irgendeine Idee?

+1

Mögliche Duplikat (http://stackoverflow.com/questions/5237198/transactsql-to-run-another-transactsql-script) –

+1

@ PM77-1 [TransactSQL andere TransactSQL-Skript ausführen] Es funktioniert nicht. Keine Ahnung warum ? Ich habe versucht, das: r/Skript Path/in meinem .sql fil, aber es unterstrichen von sql. Nicht als Befehl erkannt –

Antwort

0

Hier ist etwas zum Nachdenken ... Es verwendet die Funktion BULK INSERT, um die SQL-Anweisungen in eine temporäre Tabelle zu laden, und verwendet dann dynamisches SQL, um sie auszuführen.

Und ja ... alle die übliche Warnung von SQL-Injektion anwenden, etc, etc,

--Assume this is your main sql file..... 
--Execute some SQL commands.... 

--Now load the second SQL file and execute it 

DECLARE @SQL  NVARCHAR(MAX);  
CREATE TABLE #SQL (value nvarchar(max)); 

BULK INSERT #SQL 
FROM 'C:\TEMP\select2.sql' 
WITH 
(
    DATAFILETYPE = 'char', 
    FIELDTERMINATOR = '|', --<Make sure these characters 
    ROWTERMINATOR = '|'  --<don't appear in your SQL statements 
); 

SELECT @SQL = Value FROM #SQL 
EXEC (@SQL); 
TRUNCATE TABLE #SQL; 

-- Do some other sql commands in your main query 


--Now load the third SQL file and execute it 
BULK INSERT #SQL 
FROM 'C:\TEMP\select3.sql' 
WITH 
(
    DATAFILETYPE = 'char', 
    FIELDTERMINATOR = '|', --<Make sure these characters 
    ROWTERMINATOR = '|'  --<don't appear in your SQL statements 
); 

SELECT @SQL = Value FROM #SQL 
EXEC (@SQL); 

--Do some more sql commands 
--etc... 

--Clean up the temp table 
DROP TABLE #SQL 

Dieser Ansatz wird ohne SSMS arbeiten, und kann in jeder Umgebung

+0

gar nicht was ich suche. –

+0

Ich verstehe nicht. Sie möchten eine Abfrage von einer anderen Abfrage ausführen ...? Dies zeigt Ihnen, wie Sie eine Abfrage aus einer Datei laden ... angenommen, meine Antwort ist Ihre 'my_query_name_1.sql', und es lädt my_query_name_2.sql und my_query_name_3.sql, etc .. – Spock

+0

Ok. Versucht, das Skript auszuführen (ich muss es offensichtlich studieren). Ich habe ein "Es gibt bereits ein Objekt namens '#SQL' in der Datenbank." Wo befindet sich der # SQL? –

0

In SQL Server verwendet werden Management Studio zuerst müssen Sie xp_cmdshell Befehl aktivieren.

-- To allow advanced options to be changed. 
EXEC sp_configure 'show advanced options', 1 
GO 
-- To update the currently configured value for advanced options. 
RECONFIGURE 
GO 
-- To enable the feature. 
EXEC sp_configure 'xp_cmdshell', 1 
GO 
-- To update the currently configured value for this feature. 
RECONFIGURE 
GO 

Dann den Befehl unter

EXEC sys.xp_cmdshell 'sqlcmd -S (local) -d Experiments -i C:\Hello.sql' 

Hier Server = (local), Database = Experimente und SQL File = C: \ Hello.sql

Dies würde Abfrage innerhalb erfolgreich ausführen eine SQL-Datei, aber das Ausgabeformat ist anders als die normale.

Verwandte Themen