Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 11240|Odpoveď: 0

[Zdroj] Bežné SQL príkazy je možné vykonávať pomocou execu

[Kopírovať odkaz]
Zverejnené 9. 2. 2015 14:44:30 | | |
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)




Predchádzajúci:SQL metóda vyprázdňovania dát tabuľky
Budúci:SQL poznámky z posledných dní
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com