Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 11240|Răspunde: 0

[Sursă] Instrucțiunile SQL obișnuite pot fi executate cu exec

[Copiază linkul]
Postat pe 09.02.2015 14:44:30 | | |
1: Instrucțiunile SQL obișnuite pot fi executate cu exec

Selectează * din tabel Nume
exec('select * din tableName')
exec sp_executesql N'select * from tableName' -- Rețineți că trebuie să adăugați N înainte de șirul

2: Când se folosesc nume de câmpuri, tabele, nume de baze de date etc. ca variabile, trebuie folosit SQL dinamic

declară-l pe @fname Varchar(20)
set @fname = 'NumeÎnregistrată'
Selectează @fname din tableName -- Eroare, nu apare nicio eroare, dar rezultatul este o valoare fixă FiledName, ceea ce nu este ceea ce dorești.
exec('select ' + @fname + ' from tableName') – observați că se adaugă un spațiu pe partea ghilimelelor înainte și după semnul plus

Desigur, poți schimba și șirul în forma unei variabile
declară-l pe @fname Varchar(20)
set @fname = 'FiledName' --Setează numele câmpului

Declară @s Varchar (1000)
set @s = 'select' + @fname + ' from tableName'
exec(@s) -- succes
executiv sp_executesql @s -- Această propoziție va raporta o eroare

declarați @s Nvarchar(1000) – rețineți că aici s-a schimbat în nvarchar(1000).
set @s = 'select' + @fname + ' from tableName'
exec(@s) -- succes
Executiv sp_executesql @s -- această propoziție este corectă

3. Parametri de ieșire
declară @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
executiv(@sqls)

--cum pun rezultatul execuției executivului într-o variabilă?

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


1: Instrucțiunile SQL obișnuite pot fi executate cu Exec Exemplu: Selectează * din tableName
                Exec('select * dinTableName')
                Exec sp_executesql N'select * from tableName' -- Rețineți că trebuie să adăugați N înainte de șirul

2: Când se folosesc nume de câmpuri, tabele, nume de baze de date etc. ca variabile, trebuie folosit SQL dinamic

    Eroare: declară @fname varchar(20)
                set @fname = 'NumeÎnregistrată'
                Selectează @fname din tableName -- Eroare, nu apare nicio eroare, dar rezultatul este o valoare fixă FiledName, ceea ce nu este ceea ce dorești.
    Corect: Exec('select ' + @fname + ' from tableName') – observați adăugarea unui spațiu pe partea ghilimelelor unice înainte și după semnul plus

    Desigur, poți schimba și șirul în forma unei variabile
                declară-l pe @fname Varchar(20)
                set @fname = 'FiledName' --Setează numele câmpului

                Declară @s Varchar (1000)
                set @s = 'select' + @fname + ' from tableName'
                Exec(@s) -- Succes
                executiv sp_executesql @s -- Această propoziție va raporta o eroare

              --Notă: @s parametru trebuie să fie de tip ntext sau nchar sau nvarchar, declară @s varchar(1000) trebuie schimbat pentru a declara @s nvarchar(1000)



               Așa cum urmează:
                declarați @s Nvarchar(1000) – rețineți că aici s-a schimbat în nvarchar(1000).

                set @fname = 'FiledName' --Setează numele câmpului
                set @s = 'select' + @fname + ' from tableName'
                Exec(@s) -- Succes   
                Executiv sp_executesql @s -- această propoziție este corectă

3. Parametri de intrare sau ieșire

      (1) Parametri de intrare:
          declare @QueryString nvarchar(1000) -- variabilă dinamică de interogare (notă: trebuie să fie de tip ntext sau nchar nvarchar, nu de tip varchar)
          Declară @paramstring nvarchar(200) - setează șirul de parametri în enunțata dinamică (notă: trebuie să fie de tip ntext sau nchar nvarchar, nu de tip varchar)
          declare @input_id int - definește valoarea parametrilor care urmează să fie transferați în enunțata dinamică

          setați @QueryString='select * din numele tabelului, unde id=@id' --id este numele câmpului, @id este parametrul care trebuie transmis
          set @paramstring='@id int' -- Setează șirul care definește parametrii din enunțata dinamică
          setează @input_id =1 -- Setează valoarea parametrului ce urmează să fie transmis în instrucțiunea dinamică la 1
          executiv sp_executesql @querystring,@paramstring,@id=@input_id
          Dacă există mai mulți parametri:
          declare @QueryString nvarchar(1000) -- variabilă dinamică de interogare (notă: trebuie să fie de tip ntext sau nchar nvarchar, nu de tip varchar)
          Declară @paramstring nvarchar(200) - setează șirul de parametri în enunțata dinamică (notă: trebuie să fie de tip ntext sau nchar nvarchar, nu de tip varchar)
          declare @input_id int - definește valoarea parametrului ce urmează să fie transmis în instrucțiunea dinamică, parametrul 1
          Declare @input_name varchar(20) - definește valoarea argumentului care trebuie transmis în enunțata dinamică, parametrul 2

          setați @QueryString='select * din tablename, unde id=@id și name=@name' --id și name sunt nume de câmpuri, iar @id și @name sunt parametrii de trecut
          setați @paramstring='@id int,@name varchar(20)' -- Setați șirul definiției parametrilor în instrucțiunea dinamică, separat de ","
          setează @input_id =1 -- Setează valoarea parametrului ce urmează să fie transmis în instrucțiunea dinamică la 1
          setați @input_name='Zhang San' --Setați valoarea parametrului ce urmează să fie transmis în enunțata dinamică la 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Observați ordinea argumentelor
     (2) Parametri de ieșire
             declară @num int, @sqls nvarchar(4000)
            set @sqls='select count(*) from tableName'
            executiv(@sqls)
        --cum pun rezultatul execuției executivului într-o variabilă?         
        declare @QueryString nvarchar(1000) -- variabilă dinamică de nume interogare (Notă: trebuie să fie de tip ntext sau nchar nvarchar, nu de tip varchar)
        Declară @paramstring nvarchar(200) - setează șirul de parametri în enunțata dinamică (notă: trebuie să fie de tip ntext sau nchar nvarchar, nu de tip varchar)
        declare @output_result int - rezultatul interogării este atribuit @output_result

        Set @QueryString='Select @totalcount=Count(*) from Table Name' --@totalcount este parametrul de ieșire
        setează @paramstring='@totalcount int output' --Setează șirul definit de parametrii din instrucțiunea dinamică, separat de ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result ieșire
        selectează @output_result
        Desigur, parametrii de intrare și ieșire pot fi folosiți împreună, așa că poți încerca tu însuți.
        În plus, dacă vrei să generezi setul de rezultate al interogării de instrucțiuni dinamice, mă gândesc doar la următoarea metodă de a folosi tabele temporare, nu știu dacă ai o metodă mai bună.
        DACĂ object_id('[tempdb].[ dbo].#tmp') NU ESTE NULĂ -- Determinați dacă tabelul temporar #tmp există și, dacă există, ștergeți-l
            Drop Table #tmp
        selectează * în #tmp din numele tabelului unde 1=2 -- Creează un #tmp temporar de tabel cu aceeași structură ca numele tabelului

        declare @QueryString nvarchar(1000) -- variabilă dinamică de nume interogare (Notă: trebuie să fie de tip ntext sau nchar nvarchar, nu de tip varchar)
        Set @QueryString='Select * din numele tabelului '
        inserează în #tmp(field1,field2,...) exec(@querystirng)




Precedent:Metoda SQL de golire a datelor din tabele
Următor:Note SQL din ultimele zile
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com