1: Almindelige SQL-sætninger kan udføres med exec
Vælg * fra tableName exec('vælg * fra tableName') exec sp_executesql N'select * fra tableName' -- Bemærk, at du skal tilføje N før strengen
2: Når man bruger feltnavne, tabelnavne, databasenavne osv. som variabler, skal dynamisk SQL anvendes
Erklær @fname Varchar(20) set @fname = 'FiledName' Vælg @fname fra tableName -- Fejl, der gives ingen fejl, men resultatet er en fast værdi FiledName, hvilket ikke er det, du ønsker. exec('select ' + @fname + ' fra tableName') -- bemærk, at der tilføjes et mellemrum på siden af det enkelte anførselstegn før og efter plus-tegnet
Selvfølgelig kan du også ændre strengen til formen af en variabel Erklær @fname Varchar(20) sæt @fname = 'FiledName' --Sæt feltnavnet
erklære @s varchar(1000) sæt @s = 'vælg ' + @fname + ' fra tableName' exec(@s) -- succes exec sp_executesql @s -- Denne sætning vil rapportere en fejl
erklære @s Nvarchar(1000) – bemærk at det er ændret til nvarchar(1000) her. sæt @s = 'vælg ' + @fname + ' fra tableName' exec(@s) -- succes exec sp_executesql @s – denne sætning er korrekt
3. Outputparametre Deklarer @num int, @sqls nvarchar(4000) sæt @sqls='vælg antal(*) fra tableName' exec(@sqls)
--hvordan sætter jeg resultatet af exec-udførelse ind i en variabel?
Deklarer @num int, @sqls nvarchar(4000) sæt @sqls='vælg @a=antal(*) fra tableName ' exec sp_executesql @sqls,N'@a int output',@num output Vælg @num
1: Almindelige SQL-sætninger kan udføres med Exec Eksempel: Vælg * fra tableName Exec('select * fra tableName') Exec sp_executesql N'select * fra tableName' -- Bemærk, at du skal tilføje N før strengen
2: Når man bruger feltnavne, tabelnavne, databasenavne osv. som variabler, skal dynamisk SQL anvendes
Fejl: erklære @fname varchar(20) set @fname = 'FiledName' Vælg @fname fra tableName -- Fejl, der gives ingen fejl, men resultatet er en fast værdi FiledName, hvilket ikke er det, du ønsker. Korrekt: Exec('select ' + @fname + ' fra tableName') -- bemærk tilføjelsen af et mellemrum på siden af det enkelte citationstegn før og efter plus-tegnet
Selvfølgelig kan du også ændre strengen til formen af en variabel Erklær @fname Varchar(20) sæt @fname = 'FiledName' --Sæt feltnavnet
erklære @s varchar(1000) sæt @s = 'vælg ' + @fname + ' fra tableName' Ledelse(@s) -- Succes exec sp_executesql @s -- Denne sætning vil rapportere en fejl
--Bemærk: @s parameter skal være af ntext-, nchar- eller nvarchar-typen, deklarér @s varchar(1000) skal ændres til at erklære @s nvarchar(1000)
Som følger: erklære @s Nvarchar(1000) – bemærk at det er ændret til nvarchar(1000) her.
sæt @fname = 'FiledName' --Sæt feltnavnet sæt @s = 'vælg ' + @fname + ' fra tableName' Ledelse(@s) -- Succes exec sp_executesql @s – denne sætning er korrekt
3. Ind- eller udgangsparametre
(1) Inputparametre: Deklarer @QueryString nvarchar(1000) – dynamisk forespørgselssætningsvariabel (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type) Deklar @paramstring nvarchar(200) - sæt strengen af parametre i den dynamiske sætning (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type) Deklar @input_id int - definerer værdien af de parametre, der skal sendes ind i den dynamiske sætning
sæt @QueryString='vælg * fra tabelnavn, hvor id=@id' --id er feltnavnet, @id er parameteren, der skal sendes sæt @paramstring='@id int' -- Sætter strengen, der definerer parametrene i den dynamiske sætning Sæt @input_id =1 -- Sæt værdien af parameteren, der skal sendes i den dynamiske sætning, til 1 exec sp_executesql @querystring,@paramstring,@id=@input_id Hvis der er flere parametre: Deklarer @QueryString nvarchar(1000) – dynamisk forespørgselssætningsvariabel (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type) Deklar @paramstring nvarchar(200) - sæt strengen af parametre i den dynamiske sætning (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type) Deklarer @input_id int - definerer værdien af parameteren, der skal sendes ind i den dynamiske sætning, parameter 1 Deklarer @input_name varchar(20) - definerer værdien af argumentet, der skal sendes ind i den dynamiske sætning, parameter 2
sæt @QueryString='vælg * fra tabelnavn, hvor id=@id og name=@name' --id og navn er feltnavne, og @id og @name er parametrene, der skal sendes sæt @paramstring='@id int,@name varchar(20)' -- Sæt strengen med definitionen af parametrene i den dynamiske sætning, adskilt af "," Sæt @input_id =1 -- Sæt værdien af parameteren, der skal sendes i den dynamiske sætning, til 1 Sæt @input_name='Zhang San' --Sæt værdien af parameteren, der skal sendes i den dynamiske sætning, til 'Zhang San' exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Bemærk rækkefølgen af argumenterne (2) Outputparametre Deklarer @num int, @sqls nvarchar(4000) sæt @sqls='vælg antal(*) fra tableName' exec(@sqls) --hvordan sætter jeg resultatet af exec-udførelse ind i en variabel? deklarér @QueryString nvarchar(1000) – dynamisk forespørgselsnavnvariabel (Bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type) Deklar @paramstring nvarchar(200) - sæt strengen af parametre i den dynamiske sætning (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type) Declar @output_result int – forespørgselsresultatet tildeles @output_result
sæt @QueryString='vælg @totalcount=count(*) fra tablename' --@totalcount er outputparameteren sæt @paramstring='@totalcount int output' --Sæt strengen defineret af parametrene i den dynamiske sætning, adskilt af "," exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output Vælg @output_result Selvfølgelig kan input- og outputparametrene bruges sammen, så du kan prøve det selv. Derudover, hvis du vil outputte resultatsættet for en dynamisk sætningsforespørgsel, tænker jeg kun på følgende metode med at bruge midlertidige tabeller, jeg ved ikke, om du har en bedre metode. HVIS object_id('[tempdb].[ dbo].#tmp') ER IKKE NULL -- Bestem om den midlertidige tabel #tmp eksisterer, og hvis den gør, slet den Drop-tabel #tmp Vælg * i #tmp fra tabelnavn, hvor 1=2 -- Opret en midlertidig tabel #tmp med samme struktur som tabelnavn
deklarér @QueryString nvarchar(1000) – dynamisk forespørgselsnavnvariabel (Bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type) sæt @QueryString='vælg * fra tabelnavn ' indsæt i #tmp(felt1,felt2,...) exec(@querystirng) |