Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 11240|Risposta: 0

[Fonte] Le istruzioni SQL ordinarie possono essere eseguite con exec

[Copiato link]
Pubblicato su 09/02/2015 14:44:30 | | |
1: Le istruzioni SQL ordinarie possono essere eseguite con exec

Seleziona * da tableName
exec('select * da tableName')
exec sp_executesql N'select * da tableName' -- Nota che devi aggiungere N prima della stringa

2: Quando si usano nomi di campi, tabelle, nomi di database, ecc. come variabili, deve essere utilizzato SQL dinamico

dichiara @fname varchar(20)
set @fname = 'NomeArchiviato'
Seleziona @fname da tableName -- Errore, non viene richiesto alcun errore, ma il risultato è un valore fisso FiledName, che non è ciò che vuoi.
exec('select ' + @fname + ' da tableName') -- nota che uno spazio viene aggiunto sul lato della virgoletta prima e dopo il segno più

Naturalmente, puoi anche cambiare la stringa nella forma di una variabile
dichiara @fname varchar(20)
imposta @fname = 'NomeArchiviato' --Imposta il nome del campo

dichiara @s Varchar(1000)
imposta @s = 'seleziona' + @fname + ' da NomeTabella'
Esecutivo(@s) -- Successo
Esecutivo sp_executesql @s -- Questa frase segnala un errore

dichiara @s Nvarchar(1000) -- nota che qui viene cambiato in nvarchar(1000).
imposta @s = 'seleziona' + @fname + ' da NomeTabella'
Esecutivo(@s) -- Successo
Esecutivo sp_executesql @s -- questa frase è corretta

3. Parametri di uscita
dichiara @num int, @sqls nvarchar(4000)
set @sqls='select count(*) from tableName'
esecutivo(@sqls)

--come inserisco il risultato dell'esecuzione dell'esecutivo in una variabile?

dichiara @num int, @sqls nvarchar(4000)
Set @sqls='Select @a=Count(*) from tableName '
exec sp_executesql @sqls,N'@a int output',@num output
seleziona @num


1: Le istruzioni SQL ordinarie possono essere eseguite con Esecutivo Esempio: Seleziona * da tableName
                Esecutivo('select * da tableName')
                Exec sp_executesql N'select * da tableName' -- Nota che devi aggiungere N prima della stringa

2: Quando si usano nomi di campi, tabelle, nomi di database, ecc. come variabili, deve essere utilizzato SQL dinamico

    Errore: dichiarare @fname varchar(20)
                set @fname = 'NomeArchiviato'
                Seleziona @fname da tableName -- Errore, non viene richiesto alcun errore, ma il risultato è un valore fisso FiledName, che non è ciò che vuoi.
    Corretto: Exec('select ' + @fname + ' da tableName') -- nota l'aggiunta di uno spazio sul lato della singola virgoletta prima e dopo il segno più

    Naturalmente, puoi anche cambiare la stringa nella forma di una variabile
                dichiara @fname varchar(20)
                imposta @fname = 'NomeArchiviato' --Imposta il nome del campo

                dichiara @s Varchar(1000)
                imposta @s = 'seleziona' + @fname + ' da NomeTabella'
                Esecutivo(@s) -- Successo
                Esecutivo sp_executesql @s -- Questa frase segnala un errore

              --Nota: @s parametro deve essere di tipo ntext o nchar o nvarchar, dichiara @s varchar(1000) deve essere cambiato per dichiarare @s nvarchar(1000)



               Come segue:
                dichiara @s Nvarchar(1000) -- nota che qui viene cambiato in nvarchar(1000).

                imposta @fname = 'NomeArchiviato' --Imposta il nome del campo
                imposta @s = 'seleziona' + @fname + ' da NomeTabella'
                Esecutivo(@s) -- Successo   
                Esecutivo sp_executesql @s -- questa frase è corretta

3. Parametri di input o output

      (1) Parametri di input:
          Dichiare @QueryString nvarchar(1000) -- variabile dinamica dell'istruzione di query (nota: deve essere di tipo n-text o nchar nvarchar, non di tipo varchar)
          Dichiarare @paramstring nvarchar(200) - impostare la stringa di parametri nell'istruzione dinamica (nota: deve essere di tipo ntext o nchar nvarchar, non di tipo varchar)
          dichiara @input_id int - definisce il valore dei parametri da passare nell'istruzione dinamica

          imposta @QueryString='seleziona * da nome della tabella dove id=@id' --id è il nome del campo, @id è il parametro da passare
          set @paramstring='@id int' -- Imposta la stringa che definisce i parametri nell'istruzione dinamica
          imposta @input_id =1 -- Imposta il valore del parametro da passare nell'istruzione dinamica a 1
          Executive sp_executesql @querystring,@paramstring,@id=@input_id
          Se ci sono più parametri:
          Dichiare @QueryString nvarchar(1000) -- variabile dinamica dell'istruzione di query (nota: deve essere di tipo n-text o nchar nvarchar, non di tipo varchar)
          Dichiarare @paramstring nvarchar(200) - impostare la stringa di parametri nell'istruzione dinamica (nota: deve essere di tipo ntext o nchar nvarchar, non di tipo varchar)
          dichiara @input_id int - definisce il valore del parametro da passare nell'istruzione dinamica, parametro 1
          Dichiarare @input_name varchar(20) - definisce il valore dell'argomento da passare nell'enunciato dinamico, parametro 2

          imposta @QueryString='select * da nome della tabella dove id=@id e name=@name' --id e name sono nomi di campi, e @id e @name sono i parametri da passare
          imposta @paramstring='@id int,@name varchar(20)' -- Imposta la stringa della definizione dei parametri nell'istruzione dinamica, separata da ","
          imposta @input_id =1 -- Imposta il valore del parametro da passare nell'istruzione dinamica a 1
          imposta @input_name='Zhang San' --Imposta il valore del parametro da passare nell'enunciato dinamico a 'Zhang San'
          Executive sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Nota l'ordine degli argomenti
     (2) Parametri di uscita
             dichiara @num int, @sqls nvarchar(4000)
            set @sqls='select count(*) from tableName'
            esecutivo(@sqls)
        --come inserisco il risultato dell'esecuzione dell'esecutivo in una variabile?         
        dichiara @QueryString nvarchar(1000) -- variabile dinamica del nome della query (Nota: deve essere di tipo ntext o nchar nvarchar, non di tipo varchar)
        Dichiarare @paramstring nvarchar(200) - impostare la stringa di parametri nell'istruzione dinamica (nota: deve essere di tipo ntext o nchar nvarchar, non di tipo varchar)
        dichiara @output_result int - il risultato della query viene assegnato al @output_result

        Set @QueryString='Select @totalcount=count(*) from tablename' --@totalcount è il parametro di output
        imposta @paramstring='@totalcount int output' --Imposta la stringa definita dai parametri nell'istruzione dinamica, separata da ","
        exec sp_executesql @querystring,@paramstring,@totalcount=@output_result output
        seleziona @output_result
        Ovviamente, i parametri di input e output possono essere usati insieme, quindi puoi provare tu stesso.
        Inoltre, se vuoi produrre il set di risultati della query delle istruzioni dinamiche, penso solo al seguente metodo di usare tabelle temporanee, non so se tu abbia un modo migliore.
        SE object_id('[tempdb].[ dbo].#tmp') NON È NULLO -- Determina se la tabella temporanea #tmp esiste e, se esiste, eliminala
            Drop table #tmp
        seleziona * in #tmp da nome della tabella dove 1=2 -- Crea una #tmp temporanea della tabella con la stessa struttura di nome della tabella

        dichiara @QueryString nvarchar(1000) -- variabile dinamica del nome della query (Nota: deve essere di tipo ntext o nchar nvarchar, non di tipo varchar)
        Set @QueryString='seleziona * da nome tabella '
        inserire in #tmp(field1,field2,...) exec(@querystirng)




Precedente:Metodo SQL per svuotare i dati delle tabelle
Prossimo:Note SQL degli ultimi giorni
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com