Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 11240|Odpověď: 0

[Zdroj] Běžné SQL příkazy lze vykonávat pomocí exec

[Kopírovat odkaz]
Zveřejněno 09.02.2015 14:44:30 | | |
1: Běžné SQL příkazy lze vykonávat pomocí exec

Vyberte * z tabulkyNázev
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- Všimněte si, že musíte přidat N před řetězec

2: Při použití názvů polí, tabulek, databází atd. jako proměnných je nutné použít dynamický SQL

Deklarujte @fname varchar(20)
set @fname = 'FiledName'
Vyberte @fname z tableName – Chyba, žádná chyba se nezobrazí, ale výsledkem je pevná hodnota FiledName, což není to, co chcete.
exec('select ' + @fname + ' z tableName') -- všimněte si, že na stranu jedné uvozovky je přidána mezera před a za plus znaménkem

Samozřejmě můžete také změnit řetězec na proměnnou
Deklarujte @fname varchar(20)
set @fname = 'FiledName' --Nastavte název pole

Deklarujte @s Varchar (1000)
set @s = 'select ' + @fname + ' from tableName'
exec(@s) -- úspěch
exec sp_executesql @s -- Tato věta nahlásí chybu

declare @s Nvarchar(1000) – všimněte si, že zde je to změněno na nvarchar(1000).
set @s = 'select ' + @fname + ' from tableName'
exec(@s) -- úspěch
exec sp_executesql @s – tato věta je správná

3. Výstupní parametry
Deklarujte @num Int, @sqls Nvarchar (4000)
set @sqls='select count(*) z tableName'
exec(@sqls)

--jak vložím výsledek exec do proměnné?

Deklarujte @num Int, @sqls Nvarchar (4000)
nastavte @sqls='vybrat @a=count(*) z tableName '
exec sp_executesql @sqls,N'@a int output',@num output
Vyberte @num


1: Běžné SQL příkazy lze vykonávat pomocí Exec Example: Vyberte * z tableName
                Exec('select * from tableName')
                Exec sp_executesql N'select * from tableName' -- Všimněte si, že musíte přidat N před řetězec

2: Při použití názvů polí, tabulek, databází atd. jako proměnných je nutné použít dynamický SQL

    Chyba: declare @fname varchar(20)
                set @fname = 'FiledName'
                Vyberte @fname z tableName – Chyba, žádná chyba se nezobrazí, ale výsledkem je pevná hodnota FiledName, což není to, co chcete.
    Správně: Exec('select ' + @fname + ' from tableName') -- všimněte si přidání mezery vedle jedné uvozovky před a za znakem plus

    Samozřejmě můžete také změnit řetězec na proměnnou
                Deklarujte @fname varchar(20)
                set @fname = 'FiledName' --Nastavte název pole

                Deklarujte @s Varchar (1000)
                set @s = 'select ' + @fname + ' from tableName'
                Výkon(@s) -- Úspěch
                exec sp_executesql @s -- Tato věta nahlásí chybu

              --Poznámka: @s parametr musí být ntext, nchar nebo nvarchar typu, deklarujte @s varchar(1000) musí být změněn na declare @s nvarchar(1000)



               Následovně:
                declare @s Nvarchar(1000) – všimněte si, že zde je to změněno na nvarchar(1000).

                set @fname = 'FiledName' --Nastavte název pole
                set @s = 'select ' + @fname + ' from tableName'
                Výkon(@s) -- Úspěch   
                exec sp_executesql @s – tato věta je správná

3. Vstupní nebo výstupní parametry

      (1) Vstupní parametry:
          declare @QueryString nvarchar(1000) -- dynamická proměnná dotazu (poznámka: musí být ntext nebo nchar nvarchar typ, nikoli varchar type)
          Declare @paramstring nvarchar(200) - nastavte řetězec parametrů v dynamickém příkazu (poznámka: musí být ntext nebo nchar nvarchar typ, nikoli varchar type)
          declare @input_id int - definuje hodnotu parametrů, které mají být předány do dynamického příkazu

          nastavte @QueryString='vyberte * z názvu tabulky, kde id=@id' --id je název pole, @id je parametr, který se má předat
          set @paramstring='@id int' -- Nastavuje řetězec, který definuje parametry v dynamickém příkazu
          nastavte @input_id =1 -- Nastavte hodnotu parametru, který má být předán v dynamickém příkazu, na 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Pokud existuje více parametrů:
          declare @QueryString nvarchar(1000) -- dynamická proměnná dotazu (poznámka: musí být ntext nebo nchar nvarchar typ, nikoli varchar type)
          Declare @paramstring nvarchar(200) - nastavte řetězec parametrů v dynamickém příkazu (poznámka: musí být ntext nebo nchar nvarchar typ, nikoli varchar type)
          declare @input_id int - definuje hodnotu parametru, který má být předán do dynamického příkazu, parametr 1
          declare @input_name varchar(20) - definuje hodnotu argumentu, který má být předáván do dynamického příkazu, parametr 2

          Set @QueryString='select * z názvu tabulky, kde id=@id a jméno=@name' --id a name jsou názvy polí a @id a @name jsou parametry, které se mají předat
          nastavte @paramstring='@id int,@name varchar(20)' -- Nastavte řetězec definice parametrů v dynamickém příkazu, oddělený ","
          nastavte @input_id =1 -- Nastavte hodnotu parametru, který má být předán v dynamickém příkazu, na 1
          nastav @input_name='Zhang San' --Nastavte hodnotu parametru, který má být předán v dynamickém příkazu na 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Všimněte si pořadí argumentů
     (2) Výstupní parametry
             Deklarujte @num Int, @sqls Nvarchar (4000)
            set @sqls='select count(*) z tableName'
            exec(@sqls)
        --jak vložím výsledek exec do proměnné?         
        declare @QueryString nvarchar(1000) -- dynamická proměnná jména dotazu (Poznámka: musí být ntext nebo nchar nvarchar typ, nikoli varchar typ)
        Declare @paramstring nvarchar(200) - nastavte řetězec parametrů v dynamickém příkazu (poznámka: musí být ntext nebo nchar nvarchar typ, nikoli varchar type)
        deklarujte @output_result int – výsledek dotazu je přiřazen @output_result

        Set @QueryString='select @totalcount=count(*) from table name' --@totalcount je výstupní parametr
        set @paramstring='@totalcount int output' --Nastavte řetězec definovaný parametry v dynamickém příkazu, oddělený ","
        výkonný sp_executesql @querystring, @paramstring, @totalcount=@output_result výstup
        Vyberte @output_result
        Samozřejmě, vstupní a výstupní parametry lze použít společně, takže si to můžete vyzkoušet sami.
        Navíc, pokud chcete výstup výstupní sady dotazu na dynamické příkazy, napadá mě jen následující metoda použití dočasných tabulek, nevím, jestli máte lepší způsob.
        POKUD object_id('[tempdb].[ dbo].#tmp') NENÍ NULL -- Zjistěte, zda dočasná tabulka #tmp existuje, a pokud ano, smažte ji
            Drop table #tmp
        vyberte * do #tmp z názvu tabulky, kde 1=2 – Vytvořte dočasnou tabulku #tmp se stejnou strukturou jako název tabulky

        declare @QueryString nvarchar(1000) -- dynamická proměnná jména dotazu (Poznámka: musí být ntext nebo nchar nvarchar typ, nikoli varchar typ)
        Set @QueryString='vybrat * z názvu tabulky '
        vložit do #tmp(field1,field2,...) exec(@querystirng)




Předchozí:SQL metoda vyprázdnění dat tabulky
Další:SQL poznámky z posledních dnů
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com