Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 11240|Atsakyti: 0

[Šaltinis] Įprasti SQL sakiniai gali būti vykdomi su exec

[Kopijuoti nuorodą]
Paskelbta 2015-02-09 14:44:30 | | |
1: Įprasti SQL sakiniai gali būti vykdomi naudojant exec

Pasirinkite * iš lentelėsName
exec('pasirinkti * iš tableName')
exec sp_executesql N'select * from tableName' -- Atkreipkite dėmesį, kad prieš eilutę turite pridėti N

2: Naudojant laukų pavadinimus, lentelių pavadinimus, duomenų bazių pavadinimus ir kt. kaip kintamuosius, reikia naudoti dinaminį SQL

deklaruoti @fname varchar [20]
set @fname = 'FiledName'
Pasirinkite @fname iš tableName -- Klaida, klaida neraginama, bet rezultatas yra fiksuota reikšmė FiledName, kuri nėra tai, ko norite.
exec('select ' + @fname + ' iš tableName') -- atkreipkite dėmesį, kad viengubos kabutės šone prieš ir po pliuso ženklo pridedamas tarpas

Žinoma, taip pat galite pakeisti eilutę į kintamojo formą
deklaruoti @fname varchar [20]
set @fname = 'FiledName' --Nustatykite lauko pavadinimą

Deklaruoti @s Varchar(1000)
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- Sėkmė
exec sp_executesql @s -- Šis sakinys praneš apie klaidą

deklaruoti @s Nvarchar(1000) -- atkreipkite dėmesį, kad čia jis pakeistas į nvarchar(1000).
set @s = 'select ' + @fname + ' from tableName'
Exec(@s) -- Sėkmė
exec sp_executesql @s -- šis sakinys teisingas

3. Išvesties parametrai
Deklaruoti @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)

--kaip įdėti exec vykdymo rezultatą į kintamąjį?

Deklaruoti @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
Pasirinkite @num


1: Įprasti SQL sakiniai gali būti vykdomi naudojant Exec Pavyzdys: Pasirinkite * iš tableName
                Exec('select * from tableName')
                Exec sp_executesql N'select * from tableName' -- Atkreipkite dėmesį, kad prieš eilutę turite pridėti N

2: Naudojant laukų pavadinimus, lentelių pavadinimus, duomenų bazių pavadinimus ir kt. kaip kintamuosius, reikia naudoti dinaminį SQL

    Klaida: deklaruoti @fname varchar(20)
                set @fname = 'FiledName'
                Pasirinkite @fname iš tableName -- Klaida, klaida neraginama, bet rezultatas yra fiksuota reikšmė FiledName, kuri nėra tai, ko norite.
    Teisinga: Exec('select ' + @fname + ' from tableName') -- atkreipkite dėmesį į tarpo pridėjimą viengubos kabutės šone prieš ir po pliuso ženklo

    Žinoma, taip pat galite pakeisti eilutę į kintamojo formą
                deklaruoti @fname varchar [20]
                set @fname = 'FiledName' --Nustatykite lauko pavadinimą

                Deklaruoti @s Varchar(1000)
                set @s = 'select ' + @fname + ' from tableName'
                Exec(@s) -- Sėkmė
                exec sp_executesql @s -- Šis sakinys praneš apie klaidą

              --Pastaba: @s parametras turi būti ntext arba nchar arba nvarchar tipo, declare @s varchar(1000) turi būti pakeistas, kad deklaruotų @s nvarchar(1000)



               Taip:
                deklaruoti @s Nvarchar(1000) -- atkreipkite dėmesį, kad čia jis pakeistas į nvarchar(1000).

                set @fname = 'FiledName' --Nustatykite lauko pavadinimą
                set @s = 'select ' + @fname + ' from tableName'
                Exec(@s) -- Sėkmė   
                exec sp_executesql @s -- šis sakinys teisingas

3. Įvesties arba išvesties parametrai

      (1) Įvesties parametrai:
          deklaruoti @QueryString nvarchar(1000) -- dinaminės užklausos sakinio kintamasis (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo)
          deklaruoti @paramstring nvarchar(200) - nustatyti parametrų eilutę dinaminiame sakinyje (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo)
          deklaruoti @input_id int - apibrėžia parametrų, kurie turi būti perduodami į dinaminį sakinį, vertę

          set @QueryString='select * from tablename, kur id=@id' --id yra lauko pavadinimas, @id yra perduodamas parametras
          set @paramstring='@id int' -- Nustato eilutę, apibrėžiančią dinaminio sakinio parametrus
          set @input_id =1 -- Nustatykite dinaminiame sakinyje perduodamo parametro reikšmę į 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Jei yra keli parametrai:
          deklaruoti @QueryString nvarchar(1000) -- dinaminės užklausos sakinio kintamasis (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo)
          deklaruoti @paramstring nvarchar(200) - nustatyti parametrų eilutę dinaminiame sakinyje (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo)
          deklaruoti @input_id int - apibrėžia parametro, kuris turi būti perduodamas į dinaminį sakinį, 1 parametro reikšmę
          declare @input_name varchar(20) - apibrėžia argumento, kuris turi būti perduodamas į dinaminį sakinį, 2 parametrą, reikšmę

          nustatyti @QueryString='pasirinkite * iš tablename, kur id=@id ir name=@name' --id ir name yra laukų pavadinimai, o @id ir @name yra parametrai, kuriuos reikia perduoti
          set @paramstring='@id int,@name varchar(20)' -- Nustatykite dinaminio sakinio parametrų apibrėžimo eilutę, atskirtą ","
          set @input_id =1 -- Nustatykite dinaminiame sakinyje perduodamo parametro reikšmę į 1
          set @input_name='Zhang San' --Nustatykite parametro, kuris bus perduodamas dinaminiame sakinyje, reikšmę į 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Atkreipkite dėmesį į argumentų tvarką
     (2) Išvesties parametrai
             Deklaruoti @num int, @sqls nvarchar(4000)
            set @sqls='select count(*) from tableName'
            exec(@sqls)
        --kaip įdėti exec vykdymo rezultatą į kintamąjį?         
        declare @QueryString nvarchar(1000) -- dinaminės užklausos pavadinimo kintamasis (Pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo)
        deklaruoti @paramstring nvarchar(200) - nustatyti parametrų eilutę dinaminiame sakinyje (pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo)
        Declare @output_result int - užklausos rezultatas priskiriamas @output_result

        set @QueryString='select @totalcount=count(*) from tablename' --@totalcount yra išvesties parametras
        set @paramstring='@totalcount int output' --Nustatykite eilutę, apibrėžtą dinaminio sakinio parametrais, atskirtą ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result išvestis
        Pasirinkite @output_result
        Žinoma, įvesties ir išvesties parametrus galima naudoti kartu, todėl galite išbandyti patys.
        Be to, jei norite išvesti dinaminio teiginio užklausos rezultatų rinkinį, aš galvoju tik apie šį laikinųjų lentelių naudojimo būdą, nežinau, ar turite geresnį būdą.
        IF object_id('[tempdb].[ dbo].#tmp') IS NOT NULL -- Nustatykite, ar laikinoji lentelė #tmp egzistuoja, o jei yra, panaikinkite ją
            Numesti lentelės #tmp
        pasirinkite * į #tmp iš tablename, kur 1=2 -- Sukurti laikiną lentelės #tmp su tokia pačia struktūra kaip tablename

        declare @QueryString nvarchar(1000) -- dinaminės užklausos pavadinimo kintamasis (Pastaba: turi būti ntext arba nchar nvarchar tipo, o ne varchar tipo)
        set @QueryString='select * from tablename'
        Įterpti į #tmp(1 laukas, 2 laukas,...) exec(@querystirng)




Ankstesnis:SQL metodas lentelės duomenims ištuštinti
Kitą:Pastarųjų dienų SQL pastabos
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com