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) |