Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 11240|Antwoord: 0

[Bron] Gewone SQL-statements kunnen worden uitgevoerd met exec

[Link kopiëren]
Geplaatst op 09-02-2015 14:44:30 | | |
1: Gewone SQL-statements kunnen worden uitgevoerd met exec

Selecteer * uit tableName
exec('selecteer * uit tableName')
exec sp_executesql N'selecteer * uit tableName' -- Let op dat je N moet toevoegen vóór de string

2: Bij het gebruik van veldnamen, tabelnamen, databasenamen, enzovoort als variabelen, moet dynamische SQL worden gebruikt

Verklaar @fname Varchar(20)
set @fname = 'FiledName'
Selecteer @fname uit tableName -- Fout, er wordt geen foutmelding gegeven, maar het resultaat is een vaste waarde FiledName, wat niet is wat je wilt.
exec('select ' + @fname + ' uit tableName') -- let op dat er een spatie wordt toegevoegd aan de zijkant van het enkele aanhalingsteken voor en na het plusteken

Natuurlijk kun je de string ook veranderen in de vorm van een variabele
Verklaar @fname Varchar(20)
stel @fname = 'FiledName' --Stel de veldnaam in

Verklaar @s Varchar(1000)
set @s = 'select ' + @fname + ' uit tableName'
exec(@s) -- succes
exec sp_executesql @s -- Deze zin zal een fout melden

verklaar @s Nvarchar(1000) -- let op dat het hier is veranderd in nvarchar(1000).
set @s = 'select ' + @fname + ' uit tableName'
exec(@s) -- succes
exec sp_executesql @s -- deze zin is correct

3. Uitvoerparameters
Verklaar @num int, @sqls nvarchar(4000)
set @sqls='selecteer aantal(*) uit tableName'
exec(@sqls)

--hoe zet ik het resultaat van executie-uitvoering in een variabele?

Verklaar @num int, @sqls nvarchar(4000)
set @sqls='selecteer @a=count(*) uit tableName '
exec sp_executesql @sqls,N'@a int output',@num output
Selecteer @num


1: Gewone SQL-statements kunnen worden uitgevoerd met Exec Voorbeeld: Selecteer * uit tableName
                Exec('select * from tableName')
                Exec sp_executesql N'selecteer * uit tableName' -- Let op dat je N moet toevoegen vóór de string

2: Bij het gebruik van veldnamen, tabelnamen, databasenamen, enzovoort als variabelen, moet dynamische SQL worden gebruikt

    Fout: verklaar @fname varchar(20)
                set @fname = 'FiledName'
                Selecteer @fname uit tableName -- Fout, er wordt geen foutmelding gegeven, maar het resultaat is een vaste waarde FiledName, wat niet is wat je wilt.
    Correct: Exec('select ' + @fname + ' from tableName') -- let op de opvoeging van een spatie aan de zijkant van het enkele citatiepunt voor en na het plusteken

    Natuurlijk kun je de string ook veranderen in de vorm van een variabele
                Verklaar @fname Varchar(20)
                stel @fname = 'FiledName' --Stel de veldnaam in

                Verklaar @s Varchar(1000)
                set @s = 'select ' + @fname + ' uit tableName'
                Direct(@s) -- Succes
                exec sp_executesql @s -- Deze zin zal een fout melden

              --Opmerking: @s parameter moet van ntext, nchar of nvarchar zijn, declare @s varchar(1000) moet worden gewijzigd om @s nvarchar(1000) te declareren



               Als volgt:
                verklaar @s Nvarchar(1000) -- let op dat het hier is veranderd in nvarchar(1000).

                stel @fname = 'FiledName' --Stel de veldnaam in
                set @s = 'select ' + @fname + ' uit tableName'
                Direct(@s) -- Succes   
                exec sp_executesql @s -- deze zin is correct

3. Invoer- of uitvoerparameters

      (1) Invoerparameters:
          Declareer @QueryString nvarchar(1000) -- dynamische query-instructievariabele (opmerking: moet ntext of nchar nvarchar zijn, niet varchar type)
          Declare @paramstring nvarchar(200) - stel de reeks parameters in in de dynamische instructie (opmerking: moet ntext of nchar nvarchar type zijn, niet varchar-type)
          declare @input_id int - definieert de waarde van de parameters die in de dynamische instructie moeten worden doorgegeven

          stel @QueryString='selecteer * uit tabelnaam waarbij id=@id' --id is de veldnaam, @id is de parameter die doorgegeven moet worden
          set @paramstring='@id int' -- Stelt de string in die de parameters in de dynamische instructie definieert
          stel @input_id =1 -- Stel de waarde van de parameter die in de dynamische instructie moet worden doorgegeven in op 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Als er meerdere parameters zijn:
          Declareer @QueryString nvarchar(1000) -- dynamische query-instructievariabele (opmerking: moet ntext of nchar nvarchar zijn, niet varchar type)
          Declare @paramstring nvarchar(200) - stel de reeks parameters in in de dynamische instructie (opmerking: moet ntext of nchar nvarchar type zijn, niet varchar-type)
          declare @input_id int - definieert de waarde van de parameter die in de dynamische instructie wordt doorgegeven, parameter 1
          declare @input_name varchar(20) - definieert de waarde van het argument dat in de dynamische instructie, parameter 2, wordt doorgegeven

          stel @QueryString='selecteer * uit tablename waarbij id=@id en name=@name' --id en naam veldnamen zijn, en @id en @name de parameters zijn die doorgegeven moeten worden
          stel @paramstring='@id int,@name varchar(20)' -- Stel de string in van de definitie van de parameters in de dynamische stelling, gescheiden door ","
          stel @input_id =1 -- Stel de waarde van de parameter die in de dynamische instructie moet worden doorgegeven in op 1
          stel @input_name='Zhang San' in --Stel de waarde van de parameter die in de dynamische instructie moet worden doorgegeven in naar 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Let op de volgorde van de argumenten
     (2) Uitgangsparameters
             Verklaar @num int, @sqls nvarchar(4000)
            set @sqls='selecteer aantal(*) uit tableName'
            exec(@sqls)
        --hoe zet ik het resultaat van executie-uitvoering in een variabele?         
        declare @QueryString nvarchar(1000) -- dynamische querynaamvariabele (Opmerking: moet ntext of nchar nvarchar zijn, niet varchar type)
        Declare @paramstring nvarchar(200) - stel de reeks parameters in in de dynamische instructie (opmerking: moet ntext of nchar nvarchar type zijn, niet varchar-type)
        Declareer @output_result int - het queryresultaat wordt toegewezen aan de @output_result

        stel @QueryString='selecteer @totalcount=count(*) uit tabelnaam' --@totalcount is de outputparameter
        stel @paramstring='@totalcount int output' --Stel de string die wordt gedefinieerd door de parameters in de dynamische instructie, gescheiden door ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
        Selecteer @output_result
        Natuurlijk kunnen de input- en outputparameters samen worden gebruikt, dus je kunt het zelf proberen.
        Bovendien, als je de resultaatset van een dynamische statementquery wilt uitvoeren, denk ik alleen aan de volgende methode van het gebruik van tijdelijke tabellen; ik weet niet of je een betere manier hebt.
        ALS object_id('[tempdb].[ dbo].#tmp') IS NIET NULL -- Bepaal of de tijdelijke tabel #tmp bestaat, en als dat zo is, verwijder deze dan
            Drop-tafel #tmp
        selecteer * in #tmp van tabelnaam waarbij 1=2 -- Maak een tijdelijke tabel #tmp aan met dezelfde structuur als tabelnaam

        declare @QueryString nvarchar(1000) -- dynamische querynaamvariabele (Opmerking: moet ntext of nchar nvarchar zijn, niet varchar type)
        set @QueryString='selecteer * uit tabelnaam '
        Invoegen in #tmp(veld1,veld2,...) exec(@querystirng)




Vorig:SQL-methode voor het legen van tabelgegevens
Volgend:SQL-notities van de afgelopen dagen
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com