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) |