1: Įprasti SQL sakiniai gali būti vykdomi naudojant exec
Pasirinkite * iš lentelėsName exec('pasirinkti * iš tableName') exec sp_executesql N'select * from tableName' -- Atkreipkite dėmesį, kad prieš eilutę turite pridėti N
2: Naudojant laukų pavadinimus, lentelių pavadinimus, duomenų bazių pavadinimus ir kt. kaip kintamuosius, reikia naudoti dinaminį SQL
deklaruoti @fname varchar [20] set @fname = 'FiledName' Pasirinkite @fname iš tableName -- Klaida, klaida neraginama, bet rezultatas yra fiksuota reikšmė FiledName, kuri nėra tai, ko norite. exec('select ' + @fname + ' iš tableName') -- atkreipkite dėmesį, kad viengubos kabutės šone prieš ir po pliuso ženklo pridedamas tarpas
Žinoma, taip pat galite pakeisti eilutę į kintamojo formą deklaruoti @fname varchar [20] set @fname = 'FiledName' --Nustatykite lauko pavadinimą
Deklaruoti @s Varchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- Sėkmė exec sp_executesql @s -- Šis sakinys praneš apie klaidą
deklaruoti @s Nvarchar(1000) -- atkreipkite dėmesį, kad čia jis pakeistas į nvarchar(1000). set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- Sėkmė exec sp_executesql @s -- šis sakinys teisingas
3. Išvesties parametrai Deklaruoti @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls)
--kaip įdėti exec vykdymo rezultatą į kintamąjį?
Deklaruoti @num int, @sqls nvarchar(4000) set @sqls='select @a=count(*) from tableName ' exec sp_executesql @sqls,N'@a int output',@num output Pasirinkite @num
1: Įprasti SQL sakiniai gali būti vykdomi naudojant Exec Pavyzdys: Pasirinkite * iš tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- Atkreipkite dėmesį, kad prieš eilutę turite pridėti N
2: Naudojant laukų pavadinimus, lentelių pavadinimus, duomenų bazių pavadinimus ir kt. kaip kintamuosius, reikia naudoti dinaminį SQL
Klaida: deklaruoti @fname varchar(20) set @fname = 'FiledName' Pasirinkite @fname iš tableName -- Klaida, klaida neraginama, bet rezultatas yra fiksuota reikšmė FiledName, kuri nėra tai, ko norite. Teisinga: Exec('select ' + @fname + ' from tableName') -- atkreipkite dėmesį į tarpo pridėjimą viengubos kabutės šone prieš ir po pliuso ženklo
Žinoma, taip pat galite pakeisti eilutę į kintamojo formą deklaruoti @fname varchar [20] set @fname = 'FiledName' --Nustatykite lauko pavadinimą
Deklaruoti @s Varchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- Sėkmė exec sp_executesql @s -- Šis sakinys praneš apie klaidą
--Pastaba: @s parametras turi būti ntext arba nchar arba nvarchar tipo, declare @s varchar(1000) turi būti pakeistas, kad deklaruotų @s nvarchar(1000)
Taip: deklaruoti @s Nvarchar(1000) -- atkreipkite dėmesį, kad čia jis pakeistas į nvarchar(1000).
set @fname = 'FiledName' --Nustatykite lauko pavadinimą set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- Sėkmė exec sp_executesql @s -- šis sakinys teisingas
3. Įvesties arba išvesties parametrai
(1) Įvesties parametrai: deklaruoti @QueryString nvarchar(1000) -- dinaminės užklausos sakinio kintamasis (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo) deklaruoti @paramstring nvarchar(200) - nustatyti parametrų eilutę dinaminiame sakinyje (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo) deklaruoti @input_id int - apibrėžia parametrų, kurie turi būti perduodami į dinaminį sakinį, vertę
set @QueryString='select * from tablename, kur id=@id' --id yra lauko pavadinimas, @id yra perduodamas parametras set @paramstring='@id int' -- Nustato eilutę, apibrėžiančią dinaminio sakinio parametrus set @input_id =1 -- Nustatykite dinaminiame sakinyje perduodamo parametro reikšmę į 1 exec sp_executesql @querystring,@paramstring,@id=@input_id Jei yra keli parametrai: deklaruoti @QueryString nvarchar(1000) -- dinaminės užklausos sakinio kintamasis (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo) deklaruoti @paramstring nvarchar(200) - nustatyti parametrų eilutę dinaminiame sakinyje (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo) deklaruoti @input_id int - apibrėžia parametro, kuris turi būti perduodamas į dinaminį sakinį, 1 parametro reikšmę declare @input_name varchar(20) - apibrėžia argumento, kuris turi būti perduodamas į dinaminį sakinį, 2 parametrą, reikšmę
nustatyti @QueryString='pasirinkite * iš tablename, kur id=@id ir name=@name' --id ir name yra laukų pavadinimai, o @id ir @name yra parametrai, kuriuos reikia perduoti set @paramstring='@id int,@name varchar(20)' -- Nustatykite dinaminio sakinio parametrų apibrėžimo eilutę, atskirtą "," set @input_id =1 -- Nustatykite dinaminiame sakinyje perduodamo parametro reikšmę į 1 set @input_name='Zhang San' --Nustatykite parametro, kuris bus perduodamas dinaminiame sakinyje, reikšmę į 'Zhang San' exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Atkreipkite dėmesį į argumentų tvarką (2) Išvesties parametrai Deklaruoti @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --kaip įdėti exec vykdymo rezultatą į kintamąjį? declare @QueryString nvarchar(1000) -- dinaminės užklausos pavadinimo kintamasis (Pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo) deklaruoti @paramstring nvarchar(200) - nustatyti parametrų eilutę dinaminiame sakinyje (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo) Declare @output_result int - užklausos rezultatas priskiriamas @output_result
set @QueryString='select @totalcount=count(*) from tablename' --@totalcount yra išvesties parametras set @paramstring='@totalcount int output' --Nustatykite eilutę, apibrėžtą dinaminio sakinio parametrais, atskirtą "," exec sp_executesql @querystring,@paramstring,@totalcount=@output_result išvestis Pasirinkite @output_result Žinoma, įvesties ir išvesties parametrus galima naudoti kartu, todėl galite išbandyti patys. Be to, jei norite išvesti dinaminio teiginio užklausos rezultatų rinkinį, aš galvoju tik apie šį laikinųjų lentelių naudojimo būdą, nežinau, ar turite geresnį būdą. IF object_id('[tempdb].[ dbo].#tmp') IS NOT NULL -- Nustatykite, ar laikinoji lentelė #tmp egzistuoja, o jei yra, panaikinkite ją Numesti lentelės #tmp pasirinkite * į #tmp iš tablename, kur 1=2 -- Sukurti laikiną lentelės #tmp su tokia pačia struktūra kaip tablename
declare @QueryString nvarchar(1000) -- dinaminės užklausos pavadinimo kintamasis (Pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo) set @QueryString='select * from tablename' Įterpti į #tmp(1 laukas, 2 laukas,...) exec(@querystirng) |