2017-07-13 2 views
0

Ich benutze diesen Code:Einfügung in exec dbo.sp_executesql (mehrere Anweisung string)

select @SQLString=N'select ....(long select query).....' 
    + char(10) + '; drop table _item_list ' 

und danach

insert @tbl EXEC dbo.sp_executesql @SQLString 

Es scheint zu funktionieren, aber kann mir jemand geben einige klare Informationen über Dies? Ich habe erwartet, dass die executesql-Sache "treu" sein muss, wie in ihrer Gesamtheit bezogen auf die insert-Anweisung, die ihr vorausgeht. Es scheint jedoch, dass es kein Problem hat, die Auswahl an die Einfügung zu liefern und die Sprungtabelle unabhängig auszuführen. Auch ist das; vor dem Tropfen notwendig?

Antwort

0

Sie haben viele Möglichkeiten, um Daten in eine Tabelle zu füllen:

  1. INSERT INTO TABLE VALUES
  2. SELECT INTO FROM
  3. INSERT INTO SELECT
  4. INSERT INTO EXEC < - was Sie sprechen über

Und die ; ist nicht sehr notwendig y, nur um Batch zu trennen, das Ergebnis wird das gleiche sein, aber für einige müssen Umfang, wie Batch oder Sitzung berücksichtigen, dann ist es wichtig.

UPDATE: , die mit irrelevant statements später der select in Ordnung ist, auch gibt es mehr als eine select in Ihrem USP, aber Sie müssen sicher, dass alle zurückgegebenen Ergebnisse (die select Anweisung) müssen machen kompatibel sein mit die Tabellendefinition, auf die Sie sich beziehen.

+0

Also lassen Sie mich die Frage in einer klareren Art und Weise: im Falle der Einfügung in exec, solange die FIRST-Anweisung der exec ist eine SELECT oder Werte-Anweisung, dann die Exec-Zeichenfolge kann eine beliebige Anzahl von irrelevanten Aussagen nachher? –

+0

Überprüfen Sie mein Update;) @GeorgeMenoutis – LONG