Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 11240|Antwort: 0

[Quelle] Gewöhnliche SQL-Anweisungen können mit exec ausgeführt werden

[Link kopieren]
Veröffentlicht am 09.02.2015 14:44:30 | | |
1: Gewöhnliche SQL-Anweisungen können mit exec ausgeführt werden

Wählen Sie * aus tableName
exec('select * from tableName')
exec sp_executesql N'select * aus tableName' – Beachte, dass du N vor der Zeichenkette hinzufügen musst

2: Bei der Verwendung von Feldnamen, Tabellennamen, Datenbanknamen usw. als Variablen muss dynamisches SQL verwendet werden

Erklären Sie @fname Varchar(20)
set @fname = 'GespeichertName'
Wählen Sie @fname aus tableName aus – Fehler, es wird kein Fehler angezeigt, aber das Ergebnis ist ein fester Wert FiledName, was nicht das ist, was Sie wollen.
exec('select ' + @fname + ' aus tableName') – beachten Sie, dass an der Seite des einzelnen Anführungszeichens vor und nach dem Pluszeichen ein Leerzeichen hinzugefügt wird

Natürlich kann man den String auch in die Form einer Variablen ändern
Erklären Sie @fname Varchar(20)
setze @fname = 'FiledName' --Setze den Feldnamen

Erklären Sie @s Varchar(1000)
setze @s = 'select ' + @fname + ' aus tableName'
Exec(@s) – Erfolg
Exec sp_executesql @s – Dieser Satz meldet einen Fehler

Erklären Sie @s Nvarchar(1000) – beachten Sie, dass es hier zu nvarchar(1000) geändert wurde.
setze @s = 'select ' + @fname + ' aus tableName'
Exec(@s) – Erfolg
Exec sp_executesql @s – dieser Satz ist korrekt

3. Ausgangsparameter
Declare @num int, @sqls nvarchar(4000)
setzen @sqls='Anzahl auswählen(*) aus tableName'
Exec(@sqls)

--wie kann ich das Ergebnis der Exec-Ausführung in eine Variable einfügen?

Declare @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) aus der TabelleName '
exec sp_executesql @sqls,N'@a int output',@num output
Wählen Sie @num


1: Gewöhnliche SQL-Anweisungen können mit Exec ausgeführt werden. Beispiel: Wähle * aus tableName
                Exec('select * from tableName')
                Exec sp_executesql N'select * aus tableName' – Beachte, dass du N vor der Zeichenkette hinzufügen musst

2: Bei der Verwendung von Feldnamen, Tabellennamen, Datenbanknamen usw. als Variablen muss dynamisches SQL verwendet werden

    Fehler: deklariere @fname varchar(20)
                set @fname = 'GespeichertName'
                Wählen Sie @fname aus tableName aus – Fehler, es wird kein Fehler angezeigt, aber das Ergebnis ist ein fester Wert FiledName, was nicht das ist, was Sie wollen.
    Korrekt: Exec('select ' + @fname + ' from tableName') – beachte das Hinzufügen eines Leerzeichens an der Seite des einzelnen Anführungszeichens vor und nach dem Pluszeichen

    Natürlich kann man den String auch in die Form einer Variablen ändern
                Erklären Sie @fname Varchar(20)
                setze @fname = 'FiledName' --Setze den Feldnamen

                Erklären Sie @s Varchar(1000)
                setze @s = 'select ' + @fname + ' aus tableName'
                Exec(@s) – Erfolg
                Exec sp_executesql @s – Dieser Satz meldet einen Fehler

              --Hinweis: @s Parameter muss vom Typ ntext, nchar oder nvarchar sein, deklariert @s varchar(1000) muss geändert werden, um @s nvarchar(1000) zu deklarieren



               Wie folgt:
                Erklären Sie @s Nvarchar(1000) – beachten Sie, dass es hier zu nvarchar(1000) geändert wurde.

                setze @fname = 'FiledName' --Setze den Feldnamen
                setze @s = 'select ' + @fname + ' aus tableName'
                Exec(@s) – Erfolg   
                Exec sp_executesql @s – dieser Satz ist korrekt

3. Eingangs- oder Ausgangsparameter

      (1) Eingangsparameter:
          Declare @QueryString nvarchar(1000) – dynamische Abfrage-Statement-Variable (Hinweis: muss ntext oder nchar nvarchar sein, nicht varchar typ)
          Deklarieren @paramstring nvarchar(200) – Setzen Sie die Zeichenkette der Parameter in der dynamischen Anweisung (Hinweis: muss ntext oder nchar nvarchar sein, nicht varchar-Typ)
          declare @input_id int – definiert den Wert der Parameter, die in die dynamische Anweisung eingegeben werden sollen

          Setze @QueryString='select * aus Tabellennamen, wobei id=@id' --id ist der Feldname, @id der zu übergebene Parameter ist
          set @paramstring='@id int' – Setzt die Zeichenkette, die die Parameter in der dynamischen Anweisung definiert
          Setze @input_id =1 -- Setze den Wert des in der dynamischen Anweisung weitergegebenen Parameters auf 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Wenn es mehrere Parameter gibt:
          Declare @QueryString nvarchar(1000) – dynamische Abfrage-Statement-Variable (Hinweis: muss ntext oder nchar nvarchar sein, nicht varchar typ)
          Deklarieren @paramstring nvarchar(200) – Setzen Sie die Zeichenkette der Parameter in der dynamischen Anweisung (Hinweis: muss ntext oder nchar nvarchar sein, nicht varchar-Typ)
          Declare @input_id int – definiert den Wert des Parameters, der in die dynamische Anweisung 1 eingegeben werden soll
          Deklarieren @input_name varchar(20) – definiert den Wert des Arguments, das in die dynamische Anweisung, Parameter 2, übergeben werden soll

          Setze @QueryString='select * aus Tabellenname, wobei id=@id und name=@name' --id und name sind Feldnamen, und @id und @name sind die zu übertragenen Parameter
          Setze @paramstring='@id int,@name varchar(20)' – Setze die Zeichenkette mit der Definition der Parameter in der dynamischen Anweisung, getrennt durch ","
          Setze @input_id =1 -- Setze den Wert des in der dynamischen Anweisung weitergegebenen Parameters auf 1
          Setze @input_name='Zhang San' --Setze den Wert des in der dynamischen Anweisung weitergegebenen Parameters auf 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Beachten Sie die Reihenfolge der Argumente
     (2) Ausgangsparameter
             Declare @num int, @sqls nvarchar(4000)
            setzen @sqls='Anzahl auswählen(*) aus tableName'
            Exec(@sqls)
        --wie kann ich das Ergebnis der Exec-Ausführung in eine Variable einfügen?         
        Deklarieren @QueryString nvarchar(1000) – dynamische Abfragenamensvariable (Hinweis: muss ntext oder nchar nvarchar sein, nicht varchar)
        Deklarieren @paramstring nvarchar(200) – Setzen Sie die Zeichenkette der Parameter in der dynamischen Anweisung (Hinweis: muss ntext oder nchar nvarchar sein, nicht varchar-Typ)
        Declare @output_result INT – das Abfrageergebnis wird dem @output_result zugewiesen

        setze @QueryString='select @totalcount=count(*) aus Tablename' --@totalcount ist der Ausgabeparameter
        setze @paramstring='@totalcount int output' --Setze die durch die Parameter in der dynamischen Ausweisung definierte Zeichenfolge, getrennt durch ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result Output
        Wählen Sie @output_result
        Natürlich können Ein- und Ausgabeparameter zusammen verwendet werden, du kannst es also selbst ausprobieren.
        Außerdem, wenn du die Ergebnismenge einer dynamischen Statement-Abfrage ausgeben möchtest, denke ich nur an die folgende Methode, temporäre Tabellen zu verwenden, ich weiß nicht, ob du eine bessere Lösung hast.
        WENN object_id('[tempdb].[ dbo].#tmp') IST NICHT NULL -- Bestimmen Sie, ob die temporäre Tabelle #tmp existiert, und falls doch, löschen Sie sie
            Drop-Table #tmp
        Wählen Sie * in #tmp aus Tabellenname, wobei 1=2 – Erstellen Sie eine temporäre Tabelle #tmp mit derselben Struktur wie der Tabellenname

        Deklarieren @QueryString nvarchar(1000) – dynamische Abfragenamensvariable (Hinweis: muss ntext oder nchar nvarchar sein, nicht varchar)
        setzen @QueryString='auswählen * aus Tabellennamen '
        Insert in #tmp(Field1,Field2,...) exec(@querystirng)




Vorhergehend:SQL-Methode zum Entleeren von Tabellendaten
Nächster:SQL-Notizen aus den letzten Tagen
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com