See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 11240|Vastuse: 0

[Allikas] Tavalisi SQL-lauseid saab täita koos exec

[Kopeeri link]
Postitatud 09.02.2015 14:44:30 | | |
1: Tavalisi SQL-lauseid saab täita koos exec-iga

Vali * tabelinimest
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- Pane tähele, et enne stringi tuleb lisada N

2: Kui kasutatakse muutujatena väljade nimesid, tabelinimesid, andmebaasinimesid jne, tuleb kasutada dünaamilist SQL-i

deklareeri @fname Varchar(20)
set @fname = 'FiledName'
Vali @fname tabelinimest -- Viga, viga ei tule, kuid tulemuseks on fikseeritud väärtus FiledName, mis pole see, mida sa soovid.
exec('select ' + @fname + ' from tableName') -- pane tähele, et ühe jutumärgi serve lisatakse tühik enne ja pärast plussmärki

Loomulikult saab ka stringi muuta muutuja kujuliseks
deklareeri @fname Varchar(20)
sea @fname = 'FiledName' --Sea välja nimi

deklareeri @s varchar (1000)
sea @s = 'vali ' + @fname + ' tableName'
exec(@s) -- edu
täitja sp_executesql @s -- See lause teatab veast

deklareeri @s Nvarchar(1000) – pane tähele, et siin on see muudetud nvarchar(1000)-ks.
sea @s = 'vali ' + @fname + ' tableName'
exec(@s) -- edu
Executive sp_executesql @s -- see lause on õige

3. Väljundparameetrid
deklareeri @num int, @sqls nvarchar(4000)
sea @sqls='select count(*) from tableName'
exec(@sqls)

--kuidas ma panen täidesaatva täitmise tulemuse muutujasse?

deklareeri @num int, @sqls nvarchar(4000)
seadista @sqls='vali @a=count(*) tabelinimest'
exec sp_executesql @sqls,N'@a int väljund', @num väljund
vali @num


1: Tavalisi SQL-lauseid saab täita Exec-iga Näide: Vali * tabelinimest
                Exec('vali * tableName'st')
                Exec sp_executesql N'select * from tableName' -- Pane tähele, et enne stringi tuleb lisada N

2: Kui kasutatakse muutujatena väljade nimesid, tabelinimesid, andmebaasinimesid jne, tuleb kasutada dünaamilist SQL-i

    Viga: deklareeri @fname varchar(20)
                set @fname = 'FiledName'
                Vali @fname tabelinimest -- Viga, viga ei tule, kuid tulemuseks on fikseeritud väärtus FiledName, mis pole see, mida sa soovid.
    Õige: Exec('select ' + @fname + ' from tableName') -- märka, et lisatud tühik ühe jutumärgi servale enne ja pärast plus-märki

    Loomulikult saab ka stringi muuta muutuja kujuliseks
                deklareeri @fname Varchar(20)
                sea @fname = 'FiledName' --Sea välja nimi

                deklareeri @s varchar (1000)
                sea @s = 'vali ' + @fname + ' tableName'
                Exec(@s) -- Edu
                täitja sp_executesql @s -- See lause teatab veast

              --Märkus: @s parameeter peab olema ntext või nchar või nvarchar tüüpi, declare @s varchar(1000) tuleb muuta deklareerimiseks @s nvarchar(1000)



               Järgmine:
                deklareeri @s Nvarchar(1000) – pane tähele, et siin on see muudetud nvarchar(1000)-ks.

                sea @fname = 'FiledName' --Sea välja nimi
                sea @s = 'vali ' + @fname + ' tableName'
                Exec(@s) -- Edu   
                Executive sp_executesql @s -- see lause on õige

3. Sisend- või väljundparameetrid

      (1) Sisendparameetrid:
          Declare @QueryString nvarchar(1000) -- dünaamiline päringulause muutuja (märkus: peab olema ntext või nchar nvarchar tüüp, mitte varchar tüüp)
          Declare @paramstring nvarchar(200) – määrata dünaamilises väites parameetrite string (märkus: peab olema ntext või nchar nvarchar tüüp, mitte varchar tüüp)
          declare @input_id int – määratleb parameetrite väärtuse, mis edastatakse dünaamilisse lausesse

          Sea @QueryString='vali * tabelinimest, kus id=@id' --id on välja nimi, @id on parameeter, mida tuleb edastada
          komplekt @paramstring='@id int' -- Seab stringi, mis määratleb dünaamilise väite parameetrid
          seada @input_id =1 -- Määra dünaamilises väites edastatava parameetri väärtuseks 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Kui on mitu parameetrit:
          Declare @QueryString nvarchar(1000) -- dünaamiline päringulause muutuja (märkus: peab olema ntext või nchar nvarchar tüüp, mitte varchar tüüp)
          Declare @paramstring nvarchar(200) – määrata dünaamilises väites parameetrite string (märkus: peab olema ntext või nchar nvarchar tüüp, mitte varchar tüüp)
          declare @input_id int - määrab parameetri väärtuse, mis edastatakse dünaamilisse lausesse, parameeter 1
          declare @input_name varchar(20) - määrab dünaamilisse lausesse edastatava argumendi väärtuse, parameeter 2

          Määra @QueryString='vali * tabelinimest, kus id=@id ja nimi=@name' --id ja nimi on väljade nimed ning @id ja @name on parameetrid, mida edasi antakse
          komplekt @paramstring='@id int,@name varchar(20)' -- Määra dünaamilise väite parameetrite definitsiooni string, eraldatuna ","
          seada @input_id =1 -- Määra dünaamilises väites edastatava parameetri väärtuseks 1
          seada @input_name='Zhang San' --Sea dünaamilises lauses edastatava parameetri väärtus 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Pane tähele argumentide järjekorda
     (2) Väljundparameetrid
             deklareeri @num int, @sqls nvarchar(4000)
            sea @sqls='select count(*) from tableName'
            exec(@sqls)
        --kuidas ma panen täidesaatva täitmise tulemuse muutujasse?         
        declare @QueryString nvarchar(1000) -- dünaamilise päringu nime muutuja (märkus: peab olema ntext või nchar nvarchar tüüp, mitte varchar tüüp)
        Declare @paramstring nvarchar(200) – määrata dünaamilises väites parameetrite string (märkus: peab olema ntext või nchar nvarchar tüüp, mitte varchar tüüp)
        Declare @output_result int – päringu tulemus määratakse @output_result

        Seade @QueryString='vali @totalcount=count(*) tabelinimest' --@totalcount on väljundparameeter
        seada @paramstring='@totalcount int väljund' --Sea string, mis on määratud dünaamilise väite parameetritega, eraldatuna ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result väljund
        vali @output_result
        Loomulikult saab sisend- ja väljundparameetreid koos kasutada, nii et võid ise proovida.
        Lisaks, kui soovid väljundiks saada dünaamilise lausepäringu tulemuste komplekti, mõtlen ainult järgmisele ajutiste tabelite meetodile, ma ei tea, kas sul on paremat lahendust.
        IF object_id('[tempdb].[ dbo].#tmp') EI OLE NULL -- Määra, kas ajutine tabel #tmp eksisteerib, ja kui eksisteerib, kustuta see
            Eemalda laud #tmp
        vali * #tmp tabelinimest, kus 1=2 -- Loo ajutine tabeli #tmp sama struktuuriga nagu TableName

        declare @QueryString nvarchar(1000) -- dünaamilise päringu nime muutuja (märkus: peab olema ntext või nchar nvarchar tüüp, mitte varchar tüüp)
        seadista @QueryString='vali * tabelinimest'
        sisesta #tmp(field1,field2,...) exec(@querystirng)




Eelmine:SQL meetod tabeliandmete tühjendamiseks
Järgmine:SQL märkmed viimastest päevadest
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com