1: Bežné SQL príkazy je možné vykonávať pomocou exec
Vyberte * z tableName exec('select * from tableName') exec sp_executesql N'select * from tableName' -- Upozorňujeme, že pred reťazec musíte pridať N
2: Pri používaní názvov polí, tabuliek, databáz a podobne ako premenných je potrebné použiť dynamické SQL
Vyhláste @fname Varchar(20) set @fname = 'FiledName' Vyberte @fname z tableName -- Chyba, žiadna chyba sa nezobrazí, ale výsledkom je pevná hodnota FiledName, čo nie je to, čo chcete. exec('select ' + @fname + ' z tableName') -- všimnite si, že na stranu jednej úvodzovky sa pridáva medzera pred a za znamienkom plus
Samozrejme, reťazec môžete tiež zmeniť na tvar premennej Vyhláste @fname Varchar(20) nastaviť @fname = 'FiledName' --Nastaviť názov poľa
Deklarujte @s Varchar(1000) set @s = 'vybrať ' + @fname + ' z tableName' exec(@s) -- úspech výkonný sp_executesql @s -- Táto veta nahlási chybu
declare @s Nvarchar(1000) – všimnite si, že tu je to zmenené na nvarchar(1000). set @s = 'vybrať ' + @fname + ' z tableName' exec(@s) -- úspech exec sp_executesql @s – táto veta je správna
3. Výstupné parametre Deklarujte @num Int, @sqls Nvarchar(4000) set @sqls='vybrať count(*) z tableName' exec(@sqls)
--ako vložím výsledok exec vykonávania do premennej?
Deklarujte @num Int, @sqls Nvarchar(4000) set @sqls='vybrať @a=count(*) z tableName ' exec sp_executesql @sqls,N'@a int output',@num output Vyberte @num
1: Bežné SQL príkazy je možné vykonávať pomocou Exec Example: Vyberte * z tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- Upozorňujeme, že pred reťazec musíte pridať N
2: Pri používaní názvov polí, tabuliek, databáz a podobne ako premenných je potrebné použiť dynamické SQL
Chyba: declare @fname varchar(20) set @fname = 'FiledName' Vyberte @fname z tableName -- Chyba, žiadna chyba sa nezobrazí, ale výsledkom je pevná hodnota FiledName, čo nie je to, čo chcete. Správne: Exec('select ' + @fname + ' from tableName') -- všimnite si pridanie medzery vedľa jednej úvodzovky pred a za znamienkom plus
Samozrejme, reťazec môžete tiež zmeniť na tvar premennej Vyhláste @fname Varchar(20) nastaviť @fname = 'FiledName' --Nastaviť názov poľa
Deklarujte @s Varchar(1000) set @s = 'vybrať ' + @fname + ' z tableName' Exec(@s) -- Úspech výkonný sp_executesql @s -- Táto veta nahlási chybu
--Poznámka: @s parameter musí byť typu ntext, nchar alebo nvarchar, deklarujte @s varchar(1000) sa musí zmeniť na deklarovať @s nvarchar(1000)
Nasledovne: declare @s Nvarchar(1000) – všimnite si, že tu je to zmenené na nvarchar(1000).
nastaviť @fname = 'FiledName' --Nastaviť názov poľa set @s = 'vybrať ' + @fname + ' z tableName' Exec(@s) -- Úspech exec sp_executesql @s – táto veta je správna
3. Vstupné alebo výstupné parametre
(1) Vstupné parametre: declare @QueryString nvarchar(1000) -- dynamická premenná príkazu dotazu (poznámka: musí byť ntext alebo nchar nvarchar typ, nie varchar typ) Declare @paramstring nvarchar(200) - nastavte reťazec parametrov v dynamickom príkaze (poznámka: musí byť ntext alebo nchar nvarchar typ, nie varchar typ) declare @input_id int - definuje hodnotu parametrov, ktoré majú byť vložené do dynamického príkazu
set @QueryString='select * from table name, kde id=@id' --id je názov poľa, @id je parameter, ktorý sa má odovzdať set @paramstring='@id int' -- Nastavuje reťazec, ktorý definuje parametre v dynamickom príkaze nastaviť @input_id =1 -- Nastaviť hodnotu parametra, ktorý má byť odovzdaný v dynamickom príkaze, na 1 exec sp_executesql @querystring,@paramstring,@id=@input_id Ak existuje viacero parametrov: declare @QueryString nvarchar(1000) -- dynamická premenná príkazu dotazu (poznámka: musí byť ntext alebo nchar nvarchar typ, nie varchar typ) Declare @paramstring nvarchar(200) - nastavte reťazec parametrov v dynamickom príkaze (poznámka: musí byť ntext alebo nchar nvarchar typ, nie varchar typ) declare @input_id int - definuje hodnotu parametra, ktorý má byť vložený do dynamického príkazu, parameter 1 declare @input_name varchar(20) - definuje hodnotu argumentu, ktorý sa má odovzdať do dynamického príkazu, parameter 2
nastavte @QueryString='vybrať * z názvu tabuľky, kde id=@id a meno=@name' --id a názov sú názvy polí a @id a @name sú parametre, ktoré sa majú odovzdať nastaviť @paramstring='@id int,@name varchar(20)' -- Nastavte reťazec definície parametrov v dynamickom príkaze, oddelený "," nastaviť @input_id =1 -- Nastaviť hodnotu parametra, ktorý má byť odovzdaný v dynamickom príkaze, na 1 set @input_name='Zhang San' --Nastavte hodnotu parametra, ktorý má byť odovzdaný v dynamickom príkaze, na 'Zhang San' exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Všimnite si poradie argumentov (2) Výstupné parametre Deklarujte @num Int, @sqls Nvarchar(4000) set @sqls='vybrať count(*) z tableName' exec(@sqls) --ako vložím výsledok exec vykonávania do premennej? declare @QueryString nvarchar(1000) -- dynamická premenná názvu dotazu (Poznámka: musí byť ntext alebo nchar nvarchar typ, nie varchar typ) Declare @paramstring nvarchar(200) - nastavte reťazec parametrov v dynamickom príkaze (poznámka: musí byť ntext alebo nchar nvarchar typ, nie varchar typ) deklarujte @output_result int – výsledok dotazu je priradený @output_result
nastaviť @QueryString='vybrať @totalcount=count(*) z názvu tabuľky' --@totalcount je výstupný parameter set @paramstring='@totalcount int output' --Nastavte reťazec definovaný parametrami v dynamickom príkaze, oddelený "," výkonný sp_executesql @querystring, @paramstring, @totalcount=@output_result výstup Vyberte @output_result Samozrejme, vstupné a výstupné parametre sa dajú použiť spolu, takže si to môžete vyskúšať sami. Okrem toho, ak chcete vyprodukovať výslednú sadu dynamického dotazu na príkazy, myslím len na nasledujúcu metódu použitia dočasných tabuliek, neviem, či máte lepší spôsob. AK object_id('[tempdb].[ dbo].#tmp') NIE JE NULL -- Zistite, či dočasná tabuľka #tmp existuje, a ak áno, vymažte ju Drop table #tmp vyberte * do #tmp z názvu tabuľky, kde 1=2 – Vytvorte dočasnú tabuľku #tmp s rovnakou štruktúrou ako názov tabuľky
declare @QueryString nvarchar(1000) -- dynamická premenná názvu dotazu (Poznámka: musí byť ntext alebo nchar nvarchar typ, nie varchar typ) Set @QueryString='vybrať * z názvu tabuľky ' vložiť do #tmp(field1,field2,...) exec(@querystirng) |