Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 11240|Vastaus: 0

[Lähde] Tavalliset SQL-lauseet voidaan suorittaa exec:llä

[Kopioi linkki]
Julkaistu 9.2.2015 14.44.30 | | |
1: Tavalliset SQL-lauseet voidaan suorittaa exec:llä

Valitse * taulukon nimestä
exec('valitse * taulukon nimestä')
exec sp_executesql N'select * from tableName' -- Huomaa, että sinun täytyy lisätä N ennen merkkijonoa

2: Kun käytetään muuttujina kenttien nimiä, taulunimiä, tietokantanimiä jne., dynaamista SQL:ää on käytettävä

julistaa @fname varchar(20)
set @fname = 'FiledName'
Valitse @fname tableName -- Virhe, virheilmoitusta ei tule, mutta tuloksena on kiinteä arvo FiledName, mikä ei ole sitä, mitä haluat.
exec('select ' + @fname + ' from tableName') -- huomaa, että yksittäisen lainausmerkin sivuun lisätään väli plus-merkin eteen ja jälkeen

Tietenkin voit myös muuttaa merkkijonon muuttujan muotoon
julistaa @fname varchar(20)
aseta @fname = 'FiledName' --Aseta kentän nimi

julista @s varchar(1000)
aseta @s = 'valitse ' + @fname + ' taulunimestä'
exec(@s) -- menestys
johtaja sp_executesql @s -- Tämä lause raportoi virheen

ilmoita @s Nvarchar(1000) -- huomaa, että tässä se on muutettu muotoon nvarchar(1000).
aseta @s = 'valitse ' + @fname + ' taulunimestä'
exec(@s) -- menestys
Exec sp_executesql @s -- Tämä lause on oikea

3. Lähtöparametrit
Declare @num int, @sqls nvarchar(4000)
aseta @sqls='valitse count(*) taulukosta'
exec(@sqls)

--miten laitan suorituskyvyn tuloksen muuttujaan?

Declare @num int, @sqls nvarchar(4000)
aseta @sqls='valitse @a=count(*) taulukon nimestä'
exec sp_executesql @sqls,N'@a int output', @num output
Valitse @num


1: Tavallisia SQL-lauseita voidaan suorittaa Exec-menetelmällä Esimerkki: Valitse * from tableName
                Exec('valitse * taulukon nimestä')
                Exec sp_executesql N'select * from tableName' -- Huomaa, että sinun täytyy lisätä N ennen merkkijonoa

2: Kun käytetään muuttujina kenttien nimiä, taulunimiä, tietokantanimiä jne., dynaamista SQL:ää on käytettävä

    Virhe: julista @fname varchar(20)
                set @fname = 'FiledName'
                Valitse @fname tableName -- Virhe, virheilmoitusta ei tule, mutta tuloksena on kiinteä arvo FiledName, mikä ei ole sitä, mitä haluat.
    Oikein: Exec('select ' + @fname + ' from tableName') -- huomaa, että yksittäisen lainausmerkin sivuun lisätään välilyönti plus-merkin edellä ja jälkeen

    Tietenkin voit myös muuttaa merkkijonon muuttujan muotoon
                julistaa @fname varchar(20)
                aseta @fname = 'FiledName' --Aseta kentän nimi

                julista @s varchar(1000)
                aseta @s = 'valitse ' + @fname + ' taulunimestä'
                Exec(@s) -- Menestys
                johtaja sp_executesql @s -- Tämä lause raportoi virheen

              --Huomautus: @s parametrin täytyy olla ntext-, nchar- tai nvarchar-tyyppinen, declare @s varchar(1000) on muutettava deklare-@s nvarchar(1000)



               Seuraavasti:
                ilmoita @s Nvarchar(1000) -- huomaa, että tässä se on muutettu muotoon nvarchar(1000).

                aseta @fname = 'FiledName' --Aseta kentän nimi
                aseta @s = 'valitse ' + @fname + ' taulunimestä'
                Exec(@s) -- Menestys   
                Exec sp_executesql @s -- Tämä lause on oikea

3. Syöte- tai lähtöparametrit

      (1) Syöteparametrit:
          Declare @QueryString nvarchar(1000) -- dynaaminen kyselylauseen muuttuja (huom: täytyy olla ntext tai nchar nvarchar tyyppi, ei varchar-tyyppi)
          Declare @paramstring nvarchar(200) - aseta parametrien merkkijono dynaamisessa lauseessa (huom: täytyy olla ntext tai nchar nvarchar -tyyppi, ei varchar-tyyppi)
          declare @input_id int - määrittelee parametrien arvon, jotka välitetään dynaamiseen lauseeseen

          Aseta @QueryString='valitse * taulukon nimestä, jossa id=@id' --id on kentän nimi, @id on välitettävä parametri
          joukko @paramstring='@id int' -- Asettaa merkkijonon, joka määrittelee parametrit dynaamisessa lauseessa
          joukko @input_id =1 -- Aseta dynaamisessa lauseessa välitettävän parametrin arvoksi 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Jos parametreja on useita:
          Declare @QueryString nvarchar(1000) -- dynaaminen kyselylauseen muuttuja (huom: täytyy olla ntext tai nchar nvarchar tyyppi, ei varchar-tyyppi)
          Declare @paramstring nvarchar(200) - aseta parametrien merkkijono dynaamisessa lauseessa (huom: täytyy olla ntext tai nchar nvarchar -tyyppi, ei varchar-tyyppi)
          declare @input_id int - määrittelee parametrin arvon, joka välitetään dynaamiseen lauseeseen, parametri 1
          declare @input_name varchar(20) - määrittelee argumentin arvon, joka välitetään dynaamiseen lauseeseen, parametri 2

          aseta @QueryString='valitse * taulukon nimestä, jossa id=@id ja name=@name' --id ja name ovat kentän nimiä, ja @id ja @name ovat välitettävät parametrit
          joukko @paramstring='@id int,@name varchar(20)' -- Aseta dynaamisen lauseen parametrien määritelmän merkkijono, erotettuna ","
          joukko @input_id =1 -- Aseta dynaamisessa lauseessa välitettävän parametrin arvoksi 1
          aseta @input_name='Zhang San' --Aseta dynaamisessa lauseessa välitettävän parametrin arvoksi 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Huomaa argumenttien järjestys
     (2) Lähtöparametrit
             Declare @num int, @sqls nvarchar(4000)
            aseta @sqls='valitse count(*) taulukosta'
            exec(@sqls)
        --miten laitan suorituskyvyn tuloksen muuttujaan?         
        declare @QueryString nvarchar(1000) -- dynaaminen kyselyn nimimuuttuja (Huom: täytyy olla ntext tai nchar nvarchar tyyppi, ei varchar-tyyppi)
        Declare @paramstring nvarchar(200) - aseta parametrien merkkijono dynaamisessa lauseessa (huom: täytyy olla ntext tai nchar nvarchar -tyyppi, ei varchar-tyyppi)
        Declare @output_result int – kyselytulos annetaan @output_result

        Aseta @QueryString='valitse @totalcount=count(*) taulukon nimestä' --@totalcount on lähtöparametri
        aseta @paramstring='@totalcount int output' --Aseta merkkijono, joka määritellään dynaamisen lauseen parametreilla, erotettuna ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result tulos
        Valitse @output_result
        Tietenkin syöte- ja tulostusparametreja voi käyttää yhdessä, joten voit kokeilla itse.
        Lisäksi, jos haluat tuottaa dynaamisen lausekyselyn tuloksen, ajattelen vain seuraavaa menetelmää väliaikaisten taulukoiden käyttämiseksi, en tiedä onko sinulla parempaa tapaa.
        IF object_id('[tempdb].[ dbo].#tmp') EI OLE NULL -- Määritä, onko väliaikainen taulu #tmp olemassa, ja jos on, poista se
            Pudota pöytä #tmp
        valitse * #tmp taulunimestä, missä 1=2 -- Luo väliaikainen taulu#tmp jolla on sama rakenne kuin taulunimi

        declare @QueryString nvarchar(1000) -- dynaaminen kyselyn nimimuuttuja (Huom: täytyy olla ntext tai nchar nvarchar tyyppi, ei varchar-tyyppi)
        aseta @QueryString='valitse * taulukon nimestä '
        lisää #tmp(field1,field2,...) exec(@querystirng)




Edellinen:SQL-menetelmä taulukkodatan tyhjentämiseen
Seuraava:SQL-muistiinpanot viime päiviltä
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com