1: Običajne SQL stavke je mogoče izvajati z exec
Izberi * iz tabeleIme exec('select * from tableName') exec sp_executesql N'select * from tableName' -- Upoštevajte, da morate pred niz dodati N
2: Pri uporabi imen polj, tabel, baz podatkov itd. kot spremenljivk je treba uporabiti dinamični SQL
razglasite @fname varchar(20) set @fname = 'FiledName' Izberi @fname iz tableName -- Napaka, napaka ni sprožena, vendar je rezultat fiksna vrednost FiledName, kar ni tisto, kar želiš. exec('select ' + @fname + ' iz tableName') -- upoštevajte, da se ob strani enega narekovaja doda presledek pred in za plus znakom
Seveda lahko niz spremenite tudi v obliko spremenljivke razglasite @fname varchar(20) nastavi @fname = 'FiledName' --nastavi ime polja
Razglasite @s Varchar (1000) set @s = 'izberi ' + @fname + ' iz tableName' exec(@s) -- uspeh izvršni sp_executesql @s -- Ta stavek bo poročal o napaki
declare @s Nvarchar(1000) -- opazite, da je tukaj spremenjeno v nvarchar(1000). set @s = 'izberi ' + @fname + ' iz tableName' exec(@s) -- uspeh izvršni sp_executesql @s -- ta stavek je pravilen
3. Izhodni parametri Deklariraj @num int, @sqls Nvarchar (4000) nastavi @sqls='izberi count(*) iz tableName' exec(@sqls)
--kako vpišem rezultat izvršnega izvajanja v spremenljivko?
Deklariraj @num int, @sqls Nvarchar (4000) nastavi @sqls='izberi @a=count(*) iz tableName ' exec sp_executesql @sqls,N'@a int output',@num output Izberite @num
1: Običajne SQL stavke je mogoče izvesti z Exec Primer: Izberi * iz tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- Upoštevajte, da morate dodati N pred niz
2: Pri uporabi imen polj, tabel, baz podatkov itd. kot spremenljivk je treba uporabiti dinamični SQL
Napaka: declare @fname varchar(20) set @fname = 'FiledName' Izberi @fname iz tableName -- Napaka, napaka ni sprožena, vendar je rezultat fiksna vrednost FiledName, kar ni tisto, kar želiš. Pravilno: Exec('select ' + @fname + ' from tableName') -- opazite dodatek presledka ob strani enojnega narekovaja pred in za plus znakom
Seveda lahko niz spremenite tudi v obliko spremenljivke razglasite @fname varchar(20) nastavi @fname = 'FiledName' --nastavi ime polja
Razglasite @s Varchar (1000) set @s = 'izberi ' + @fname + ' iz tableName' Izvršni (@s) -- Uspeh izvršni sp_executesql @s -- Ta stavek bo poročal o napaki
--Opomba: @s parameter mora biti tipa ntext, nchar ali nvarchar, declare @s varchar(1000) mora biti spremenjen v declare @s nvarchar(1000)
Kot sledi: declare @s Nvarchar(1000) -- opazite, da je tukaj spremenjeno v nvarchar(1000).
nastavi @fname = 'FiledName' --nastavi ime polja set @s = 'izberi ' + @fname + ' iz tableName' Izvršni (@s) -- Uspeh izvršni sp_executesql @s -- ta stavek je pravilen
3. Vhodni ali izhodni parametri
(1) Vhodni parametri: declare @QueryString nvarchar(1000) -- dinamična spremenljivka poizvedbnega stavka (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip) declare @paramstring nvarchar(200) - nastavi niz parametrov v dinamičnem stavku (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip) declare @input_id int - določa vrednost parametrov, ki jih je treba prenesti v dinamično izjavo
nastavi @QueryString='izberi * iz imena tabele, kjer je id=@id' --id je ime polja, @id je parameter, ki ga je treba prenesti set @paramstring='@id int' -- Določi niz, ki definira parametre v dinamični stavki nastavi @input_id =1 -- Nastavi vrednost parametra, ki ga želimo prenesti v dinamični stavek, na 1 izvršni sp_executesql @querystring,@paramstring,@id=@input_id Če je več parametrov: declare @QueryString nvarchar(1000) -- dinamična spremenljivka poizvedbnega stavka (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip) declare @paramstring nvarchar(200) - nastavi niz parametrov v dinamičnem stavku (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip) declare @input_id int - določa vrednost parametra, ki se posreduje v dinamični stavek, parameter 1 declare @input_name varchar(20) - določa vrednost argumenta, ki ga je treba prenesti v dinamični stavek, parameter 2
nastavi @QueryString='izberi * iz imena tabele, kjer id=@id in ime=@name' --id in ime sta imeni polj, @id in @name pa sta parametra, ki ju je treba prenesti nastavi @paramstring='@id int,@name varchar(20)' -- Nastavi niz definicij parametrov v dinamični izjavi, ločen z "," nastavi @input_id =1 -- Nastavi vrednost parametra, ki ga želimo prenesti v dinamični stavek, na 1 nastavi @input_name='Zhang San' --Nastavi vrednost parametra, ki ga je treba prenesti v dinamični stavki, na 'Zhang San' exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Opazite vrstni red argumentov (2) Izhodni parametri Deklariraj @num int, @sqls Nvarchar (4000) nastavi @sqls='izberi count(*) iz tableName' exec(@sqls) --kako vpišem rezultat izvršnega izvajanja v spremenljivko? declare @QueryString nvarchar(1000) -- dinamična spremenljivka imena poizvedbe (Opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip) declare @paramstring nvarchar(200) - nastavi niz parametrov v dinamičnem stavku (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip) declare @output_result int – rezultat poizvedbe je dodeljen @output_result
nastavi @QueryString='izberi @totalcount=count(*) iz imena tabele' --@totalcount je izhodni parameter nastavi @paramstring='@totalcount int output' --Nastavi niz, definiran s parametri v dinamičnem stavku, ločen z "," izvršni sp_executesql @querystring,@paramstring,@totalcount=@output_result izhod Izberi @output_result Seveda lahko vhodni in izhodni parametri uporabljate skupaj, tako da lahko poskusite sami. Poleg tega, če želite izpisati rezultat dinamične poizvedbe o stavkih, razmišljam le o naslednji metodi uporabe začasnih tabel, ne vem, če imate boljši način. ČE object_id('[tempdb].[ dbo].#tmp') NI NULL -- Ugotovi, ali začasna tabela #tmp obstaja, in če obstaja, jo izbriši Drop tabela #tmp izberi * v #tmp iz tablename, kjer je 1=2 -- Ustvari začasno tabelo #tmp z enako strukturo kot tablename
declare @QueryString nvarchar(1000) -- dinamična spremenljivka imena poizvedbe (Opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip) nastavi @QueryString='izberi * iz imena tabele ' vstavi v #tmp(field1,field2,...) exec(@querystirng) |