Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 11240|Odgovoriti: 0

[Vir] Običajne SQL stavke je mogoče izvajati z exec

[Kopiraj povezavo]
Objavljeno na 9. 02. 2015 14:44:30 | | |
1: Običajne SQL stavke je mogoče izvajati z exec

Izberi * iz tabeleIme
exec('select * from tableName')
exec sp_executesql N'select * from tableName' -- Upoštevajte, da morate pred niz dodati N

2: Pri uporabi imen polj, tabel, baz podatkov itd. kot spremenljivk je treba uporabiti dinamični SQL

razglasite @fname varchar(20)
set @fname = 'FiledName'
Izberi @fname iz tableName -- Napaka, napaka ni sprožena, vendar je rezultat fiksna vrednost FiledName, kar ni tisto, kar želiš.
exec('select ' + @fname + ' iz tableName') -- upoštevajte, da se ob strani enega narekovaja doda presledek pred in za plus znakom

Seveda lahko niz spremenite tudi v obliko spremenljivke
razglasite @fname varchar(20)
nastavi @fname = 'FiledName' --nastavi ime polja

Razglasite @s Varchar (1000)
set @s = 'izberi ' + @fname + ' iz tableName'
exec(@s) -- uspeh
izvršni sp_executesql @s -- Ta stavek bo poročal o napaki

declare @s Nvarchar(1000) -- opazite, da je tukaj spremenjeno v nvarchar(1000).
set @s = 'izberi ' + @fname + ' iz tableName'
exec(@s) -- uspeh
izvršni sp_executesql @s -- ta stavek je pravilen

3. Izhodni parametri
Deklariraj @num int, @sqls Nvarchar (4000)
nastavi @sqls='izberi count(*) iz tableName'
exec(@sqls)

--kako vpišem rezultat izvršnega izvajanja v spremenljivko?

Deklariraj @num int, @sqls Nvarchar (4000)
nastavi @sqls='izberi @a=count(*) iz tableName '
exec sp_executesql @sqls,N'@a int output',@num output
Izberite @num


1: Običajne SQL stavke je mogoče izvesti z Exec Primer: Izberi * iz tableName
                Exec('select * from tableName')
                Exec sp_executesql N'select * from tableName' -- Upoštevajte, da morate dodati N pred niz

2: Pri uporabi imen polj, tabel, baz podatkov itd. kot spremenljivk je treba uporabiti dinamični SQL

    Napaka: declare @fname varchar(20)
                set @fname = 'FiledName'
                Izberi @fname iz tableName -- Napaka, napaka ni sprožena, vendar je rezultat fiksna vrednost FiledName, kar ni tisto, kar želiš.
    Pravilno: Exec('select ' + @fname + ' from tableName') -- opazite dodatek presledka ob strani enojnega narekovaja pred in za plus znakom

    Seveda lahko niz spremenite tudi v obliko spremenljivke
                razglasite @fname varchar(20)
                nastavi @fname = 'FiledName' --nastavi ime polja

                Razglasite @s Varchar (1000)
                set @s = 'izberi ' + @fname + ' iz tableName'
                Izvršni (@s) -- Uspeh
                izvršni sp_executesql @s -- Ta stavek bo poročal o napaki

              --Opomba: @s parameter mora biti tipa ntext, nchar ali nvarchar, declare @s varchar(1000) mora biti spremenjen v declare @s nvarchar(1000)



               Kot sledi:
                declare @s Nvarchar(1000) -- opazite, da je tukaj spremenjeno v nvarchar(1000).

                nastavi @fname = 'FiledName' --nastavi ime polja
                set @s = 'izberi ' + @fname + ' iz tableName'
                Izvršni (@s) -- Uspeh   
                izvršni sp_executesql @s -- ta stavek je pravilen

3. Vhodni ali izhodni parametri

      (1) Vhodni parametri:
          declare @QueryString nvarchar(1000) -- dinamična spremenljivka poizvedbnega stavka (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip)
          declare @paramstring nvarchar(200) - nastavi niz parametrov v dinamičnem stavku (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip)
          declare @input_id int - določa vrednost parametrov, ki jih je treba prenesti v dinamično izjavo

          nastavi @QueryString='izberi * iz imena tabele, kjer je id=@id' --id je ime polja, @id je parameter, ki ga je treba prenesti
          set @paramstring='@id int' -- Določi niz, ki definira parametre v dinamični stavki
          nastavi @input_id =1 -- Nastavi vrednost parametra, ki ga želimo prenesti v dinamični stavek, na 1
          izvršni sp_executesql @querystring,@paramstring,@id=@input_id
          Če je več parametrov:
          declare @QueryString nvarchar(1000) -- dinamična spremenljivka poizvedbnega stavka (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip)
          declare @paramstring nvarchar(200) - nastavi niz parametrov v dinamičnem stavku (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip)
          declare @input_id int - določa vrednost parametra, ki se posreduje v dinamični stavek, parameter 1
          declare @input_name varchar(20) - določa vrednost argumenta, ki ga je treba prenesti v dinamični stavek, parameter 2

          nastavi @QueryString='izberi * iz imena tabele, kjer id=@id in ime=@name' --id in ime sta imeni polj, @id in @name pa sta parametra, ki ju je treba prenesti
          nastavi @paramstring='@id int,@name varchar(20)' -- Nastavi niz definicij parametrov v dinamični izjavi, ločen z ","
          nastavi @input_id =1 -- Nastavi vrednost parametra, ki ga želimo prenesti v dinamični stavek, na 1
          nastavi @input_name='Zhang San' --Nastavi vrednost parametra, ki ga je treba prenesti v dinamični stavki, na 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Opazite vrstni red argumentov
     (2) Izhodni parametri
             Deklariraj @num int, @sqls Nvarchar (4000)
            nastavi @sqls='izberi count(*) iz tableName'
            exec(@sqls)
        --kako vpišem rezultat izvršnega izvajanja v spremenljivko?         
        declare @QueryString nvarchar(1000) -- dinamična spremenljivka imena poizvedbe (Opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip)
        declare @paramstring nvarchar(200) - nastavi niz parametrov v dinamičnem stavku (opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip)
        declare @output_result int – rezultat poizvedbe je dodeljen @output_result

        nastavi @QueryString='izberi @totalcount=count(*) iz imena tabele' --@totalcount je izhodni parameter
        nastavi @paramstring='@totalcount int output' --Nastavi niz, definiran s parametri v dinamičnem stavku, ločen z ","
        izvršni sp_executesql @querystring,@paramstring,@totalcount=@output_result izhod
        Izberi @output_result
        Seveda lahko vhodni in izhodni parametri uporabljate skupaj, tako da lahko poskusite sami.
        Poleg tega, če želite izpisati rezultat dinamične poizvedbe o stavkih, razmišljam le o naslednji metodi uporabe začasnih tabel, ne vem, če imate boljši način.
        ČE object_id('[tempdb].[ dbo].#tmp') NI NULL -- Ugotovi, ali začasna tabela #tmp obstaja, in če obstaja, jo izbriši
            Drop tabela #tmp
        izberi * v #tmp iz tablename, kjer je 1=2 -- Ustvari začasno tabelo #tmp z enako strukturo kot tablename

        declare @QueryString nvarchar(1000) -- dinamična spremenljivka imena poizvedbe (Opomba: mora biti ntext ali nchar nvarchar tip, ne varchar tip)
        nastavi @QueryString='izberi * iz imena tabele '
        vstavi v #tmp(field1,field2,...) exec(@querystirng)




Prejšnji:SQL metoda za praznjenje podatkov tabel
Naslednji:SQL zapiski iz zadnjih dni
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com