Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 11240|Svar: 0

[Kilde] Almindelige SQL-sætninger kan udføres med exec

[Kopier link]
Opslået på 09/02/2015 14.44.30 | | |
1: Almindelige SQL-sætninger kan udføres med exec

Vælg * fra tableName
exec('vælg * fra tableName')
exec sp_executesql N'select * fra tableName' -- Bemærk, at du skal tilføje N før strengen

2: Når man bruger feltnavne, tabelnavne, databasenavne osv. som variabler, skal dynamisk SQL anvendes

Erklær @fname Varchar(20)
set @fname = 'FiledName'
Vælg @fname fra tableName -- Fejl, der gives ingen fejl, men resultatet er en fast værdi FiledName, hvilket ikke er det, du ønsker.
exec('select ' + @fname + ' fra tableName') -- bemærk, at der tilføjes et mellemrum på siden af det enkelte anførselstegn før og efter plus-tegnet

Selvfølgelig kan du også ændre strengen til formen af en variabel
Erklær @fname Varchar(20)
sæt @fname = 'FiledName' --Sæt feltnavnet

erklære @s varchar(1000)
sæt @s = 'vælg ' + @fname + ' fra tableName'
exec(@s) -- succes
exec sp_executesql @s -- Denne sætning vil rapportere en fejl

erklære @s Nvarchar(1000) – bemærk at det er ændret til nvarchar(1000) her.
sæt @s = 'vælg ' + @fname + ' fra tableName'
exec(@s) -- succes
exec sp_executesql @s – denne sætning er korrekt

3. Outputparametre
Deklarer @num int, @sqls nvarchar(4000)
sæt @sqls='vælg antal(*) fra tableName'
exec(@sqls)

--hvordan sætter jeg resultatet af exec-udførelse ind i en variabel?

Deklarer @num int, @sqls nvarchar(4000)
sæt @sqls='vælg @a=antal(*) fra tableName '
exec sp_executesql @sqls,N'@a int output',@num output
Vælg @num


1: Almindelige SQL-sætninger kan udføres med Exec Eksempel: Vælg * fra tableName
                Exec('select * fra tableName')
                Exec sp_executesql N'select * fra tableName' -- Bemærk, at du skal tilføje N før strengen

2: Når man bruger feltnavne, tabelnavne, databasenavne osv. som variabler, skal dynamisk SQL anvendes

    Fejl: erklære @fname varchar(20)
                set @fname = 'FiledName'
                Vælg @fname fra tableName -- Fejl, der gives ingen fejl, men resultatet er en fast værdi FiledName, hvilket ikke er det, du ønsker.
    Korrekt: Exec('select ' + @fname + ' fra tableName') -- bemærk tilføjelsen af et mellemrum på siden af det enkelte citationstegn før og efter plus-tegnet

    Selvfølgelig kan du også ændre strengen til formen af en variabel
                Erklær @fname Varchar(20)
                sæt @fname = 'FiledName' --Sæt feltnavnet

                erklære @s varchar(1000)
                sæt @s = 'vælg ' + @fname + ' fra tableName'
                Ledelse(@s) -- Succes
                exec sp_executesql @s -- Denne sætning vil rapportere en fejl

              --Bemærk: @s parameter skal være af ntext-, nchar- eller nvarchar-typen, deklarér @s varchar(1000) skal ændres til at erklære @s nvarchar(1000)



               Som følger:
                erklære @s Nvarchar(1000) – bemærk at det er ændret til nvarchar(1000) her.

                sæt @fname = 'FiledName' --Sæt feltnavnet
                sæt @s = 'vælg ' + @fname + ' fra tableName'
                Ledelse(@s) -- Succes   
                exec sp_executesql @s – denne sætning er korrekt

3. Ind- eller udgangsparametre

      (1) Inputparametre:
          Deklarer @QueryString nvarchar(1000) – dynamisk forespørgselssætningsvariabel (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type)
          Deklar @paramstring nvarchar(200) - sæt strengen af parametre i den dynamiske sætning (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type)
          Deklar @input_id int - definerer værdien af de parametre, der skal sendes ind i den dynamiske sætning

          sæt @QueryString='vælg * fra tabelnavn, hvor id=@id' --id er feltnavnet, @id er parameteren, der skal sendes
          sæt @paramstring='@id int' -- Sætter strengen, der definerer parametrene i den dynamiske sætning
          Sæt @input_id =1 -- Sæt værdien af parameteren, der skal sendes i den dynamiske sætning, til 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Hvis der er flere parametre:
          Deklarer @QueryString nvarchar(1000) – dynamisk forespørgselssætningsvariabel (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type)
          Deklar @paramstring nvarchar(200) - sæt strengen af parametre i den dynamiske sætning (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type)
          Deklarer @input_id int - definerer værdien af parameteren, der skal sendes ind i den dynamiske sætning, parameter 1
          Deklarer @input_name varchar(20) - definerer værdien af argumentet, der skal sendes ind i den dynamiske sætning, parameter 2

          sæt @QueryString='vælg * fra tabelnavn, hvor id=@id og name=@name' --id og navn er feltnavne, og @id og @name er parametrene, der skal sendes
          sæt @paramstring='@id int,@name varchar(20)' -- Sæt strengen med definitionen af parametrene i den dynamiske sætning, adskilt af ","
          Sæt @input_id =1 -- Sæt værdien af parameteren, der skal sendes i den dynamiske sætning, til 1
          Sæt @input_name='Zhang San' --Sæt værdien af parameteren, der skal sendes i den dynamiske sætning, til 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Bemærk rækkefølgen af argumenterne
     (2) Outputparametre
             Deklarer @num int, @sqls nvarchar(4000)
            sæt @sqls='vælg antal(*) fra tableName'
            exec(@sqls)
        --hvordan sætter jeg resultatet af exec-udførelse ind i en variabel?         
        deklarér @QueryString nvarchar(1000) – dynamisk forespørgselsnavnvariabel (Bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type)
        Deklar @paramstring nvarchar(200) - sæt strengen af parametre i den dynamiske sætning (bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type)
        Declar @output_result int – forespørgselsresultatet tildeles @output_result

        sæt @QueryString='vælg @totalcount=count(*) fra tablename' --@totalcount er outputparameteren
        sæt @paramstring='@totalcount int output' --Sæt strengen defineret af parametrene i den dynamiske sætning, adskilt af ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
        Vælg @output_result
        Selvfølgelig kan input- og outputparametrene bruges sammen, så du kan prøve det selv.
        Derudover, hvis du vil outputte resultatsættet for en dynamisk sætningsforespørgsel, tænker jeg kun på følgende metode med at bruge midlertidige tabeller, jeg ved ikke, om du har en bedre metode.
        HVIS object_id('[tempdb].[ dbo].#tmp') ER IKKE NULL -- Bestem om den midlertidige tabel #tmp eksisterer, og hvis den gør, slet den
            Drop-tabel #tmp
        Vælg * i #tmp fra tabelnavn, hvor 1=2 -- Opret en midlertidig tabel #tmp med samme struktur som tabelnavn

        deklarér @QueryString nvarchar(1000) – dynamisk forespørgselsnavnvariabel (Bemærk: skal være ntext eller nchar nvarchar-type, ikke varchar-type)
        sæt @QueryString='vælg * fra tabelnavn '
        indsæt i #tmp(felt1,felt2,...) exec(@querystirng)




Tidligere:SQL-metoden til tømmelse af tabeldata
Næste:SQL-noter fra de seneste dage
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com