Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 11240|Svar: 0

[Källa] Vanliga SQL-satser kan köras med exec

[Kopiera länk]
Publicerad på 2015-02-09 14:44:30 | | |
1: Vanliga SQL-satser kan köras med exec

Välj * från tableName
exec('select * from tableName')
exec sp_executesql N'select * från tableName' – Observera att du måste lägga till N före strängen

2: När fältnamn, tabellnamn, databasnamn etc. används som variabler måste dynamisk SQL användas

Förklara @fname Varchar(20)
set @fname = 'FiladNamn'
Välj @fname från tableName – Fel, inget fel uppstår, men resultatet är ett fast värde FiledName, vilket inte är vad du vill ha.
exec('select ' + @fname + ' från tableName') – notera att ett mellanslag läggs till på sidan av det enkla citattecknet före och efter plustecknet

Självklart kan du också ändra strängen till formen av en variabel
Förklara @fname Varchar(20)
sätt @fname = 'Filnamn' --Sätt fältnamnet

Förklara @s varchar(1000)
set @s = 'select ' + @fname + ' från tableName'
exec(@s) – framgång
exec sp_executesql @s -- Denna mening kommer att rapportera ett fel

deklarera @s Nvarchar(1000) – notera att det ändras till nvarchar(1000) här.
set @s = 'select ' + @fname + ' från tableName'
exec(@s) – framgång
exec sp_executesql @s – denna mening är korrekt

3. Utgångsparametrar
Deklarera @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
exec(@sqls)

--hur lägger jag in resultatet av exec-exekvering i en variabel?

Deklarera @num int, @sqls nvarchar(4000)
set @sqls='select @a=count(*) från tableName '
exec sp_executesql @sqls,N'@a int output',@num output
Välj @num


1: Vanliga SQL-satser kan köras med Exec Exempel: Välj * från tableName
                Exec('select * from tableName')
                Exec sp_executesql N'select * från tableName' – Observera att du måste lägga till N före strängen

2: När fältnamn, tabellnamn, databasnamn etc. används som variabler måste dynamisk SQL användas

    Fel: deklarera @fname varchar(20)
                set @fname = 'FiladNamn'
                Välj @fname från tableName – Fel, inget fel uppstår, men resultatet är ett fast värde FiledName, vilket inte är vad du vill ha.
    Korrekt: Exec('select ' + @fname + ' from tableName') -- lägg märke till ett mellanslag på sidan av det enkla citattecknet före och efter plustecknet

    Självklart kan du också ändra strängen till formen av en variabel
                Förklara @fname Varchar(20)
                sätt @fname = 'Filnamn' --Sätt fältnamnet

                Förklara @s varchar(1000)
                set @s = 'select ' + @fname + ' från tableName'
                Exec(@s) -- Framgång
                exec sp_executesql @s -- Denna mening kommer att rapportera ett fel

              --Observera: @s parameter måste vara av ntext-, nchar- eller nvarchar-typ, deklarera @s varchar(1000) måste ändras till att deklarera @s nvarchar(1000)



               Följande följer:
                deklarera @s Nvarchar(1000) – notera att det ändras till nvarchar(1000) här.

                sätt @fname = 'Filnamn' --Sätt fältnamnet
                set @s = 'select ' + @fname + ' från tableName'
                Exec(@s) -- Framgång   
                exec sp_executesql @s – denna mening är korrekt

3. In- eller utgångsparametrar

      (1) Indataparametrar:
          Deklarera @QueryString nvarchar(1000) – dynamisk frågesatsvariabel (obs: måste vara ntext eller nchar nvarchar-typ, inte varchar-typ)
          Deklarera @paramstring nvarchar(200) – sätt parametersträngen i det dynamiska uttalandet (notera: måste vara ntext eller nchar nvarchar-typ, inte varchar-typ)
          Deklarera @input_id int - definierar värdet på parametrarna som ska skickas in i det dynamiska uttalandet

          Sätt @QueryString='välj * från tabellnamn där id=@id' --id är fältnamnet, @id är parametern som ska skickas
          set @paramstring='@id int' – Sätter strängen som definierar parametrarna i det dynamiska satsen
          Sätt @input_id =1 -- Sätt värdet på parametern som ska skickas i det dynamiska uttalandet till 1
          exec sp_executesql @querystring,@paramstring,@id=@input_id
          Om det finns flera parametrar:
          Deklarera @QueryString nvarchar(1000) – dynamisk frågesatsvariabel (obs: måste vara ntext eller nchar nvarchar-typ, inte varchar-typ)
          Deklarera @paramstring nvarchar(200) – sätt parametersträngen i det dynamiska uttalandet (notera: måste vara ntext eller nchar nvarchar-typ, inte varchar-typ)
          Deklarera @input_id int - definierar värdet på parametern som ska skickas in i den dynamiska satsen, parameter 1
          Deklarera @input_name varchar(20) - definierar värdet på argumentet som ska skickas in i det dynamiska uttalandet, parameter 2

          Sätt @QueryString='select * från tabellnamn där id=@id och name=@name' --id och namn är fältnamn, och @id och @name är parametrarna som ska skickas
          Sätt @paramstring='@id int,@name varchar(20)' -- Sätt strängen för definitionen av parametrarna i det dynamiska uttalandet, separerad med ","
          Sätt @input_id =1 -- Sätt värdet på parametern som ska skickas i det dynamiska uttalandet till 1
          Sätt @input_name='Zhang San' --Sätt värdet på parametern som ska skickas i det dynamiska uttalandet till 'Zhang San'
          exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Notera ordningen på argumenten
     (2) Utgångsparametrar
             Deklarera @num int, @sqls nvarchar(4000)
            set @sqls='select count(*) from tableName'
            exec(@sqls)
        --hur lägger jag in resultatet av exec-exekvering i en variabel?         
        Deklarera @QueryString nvarchar(1000) – dynamisk variabel för frågenamn (Obs: måste vara ntext eller nchar nvarchar-typ, inte varchar-typ)
        Deklarera @paramstring nvarchar(200) – sätt parametersträngen i det dynamiska uttalandet (notera: måste vara ntext eller nchar nvarchar-typ, inte varchar-typ)
        Deklarera @output_result int – frågeresultatet tilldelas @output_result

        set @QueryString='select @totalcount=count(*) från tablename' --@totalcount är utdataparametern
        Sätt @paramstring='@totalcount int-utgång' --Sätt strängen definierad av parametrarna i det dynamiska uttalandet, separerad med ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
        Välj @output_result
        Självklart kan in- och utgångsparametrarna användas tillsammans, så du kan prova själv.
        Dessutom, om du vill ge resultatuppsättningen för en dynamisk satsfråga, tänker jag bara på följande metod att använda temporära tabeller, jag vet inte om du har ett bättre sätt.
        OM object_id('[tempdb].[ dbo].#tmp') ÄR INTE NULL -- Bestäm om den tillfälliga tabellen #tmp existerar, och om den gör det, ta bort den
            Droppbord #tmp
        Välj * i #tmp från tabellnamn där 1=2 -- Skapa en tillfällig tabell #tmp med samma struktur som tabellnamn

        Deklarera @QueryString nvarchar(1000) – dynamisk variabel för frågenamn (Obs: måste vara ntext eller nchar nvarchar-typ, inte varchar-typ)
        set @QueryString='välj * från tabellnamn '
        infoga i #tmp(fält1,fält2,...) exec(@querystirng)




Föregående:SQL-metoden för att tömma tabelldata
Nästa:SQL-anteckningar från de senaste dagarna
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com