1: Parastos SQL paziņojumus var izpildīt ar exec
Atlasiet * no tabulasNosaukums exec('atlasīt * no tabulasNosaukums') exec sp_executesql N'select * from tableName' -- Ņemiet vērā, ka pirms virknes ir jāpievieno N
2: Izmantojot lauku nosaukumus, tabulu nosaukumus, datu bāzu nosaukumus utt. Kā mainīgos, jāizmanto dinamiskais SQL
deklarēt @fname varchar(20) set @fname = 'FiledName' Atlasiet @fname no tableName -- Kļūda, netiek parādīta kļūda, bet rezultāts ir fiksēta vērtība FiledName, kas nav tas, ko vēlaties. exec('select ' + @fname + ' from tableName') -- ņemiet vērā, ka atstarpe tiek pievienota vienpēdiņas malā pirms un pēc plusa zīmes
Protams, jūs varat arī mainīt virkni mainīgā formā deklarēt @fname varchar(20) set @fname = 'FiledName' --Iestatiet lauka nosaukumu
deklarēt @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' exec(@s) -- panākumi exec sp_executesql @s -- Šis teikums ziņos par kļūdu
deklarēt @s Nvarchar(1000) -- ņemiet vērā, ka šeit tas ir mainīts uz nvarchar(1000). set @s = 'select ' + @fname + ' from tableName' exec(@s) -- panākumi exec sp_executesql @s -- šis teikums ir pareizs
3. Izejas parametri Deklarēt @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls)
--kā es varu ievietot izpildes rezultātu mainīgajā?
Deklarēt @num int, @sqls nvarchar(4000) set @sqls='select @a=count(*) from tableName ' exec sp_executesql @sqls,N'@a int output',@num output Atlasiet @num
1: Parastos SQL paziņojumus var izpildīt ar Exec Piemērs: Atlasiet * no tableName Exec('atlasīt * no tabulasNosaukums') Exec sp_executesql N'select * from tableName' -- Ņemiet vērā, ka pirms virknes ir jāpievieno N
2: Izmantojot lauku nosaukumus, tabulu nosaukumus, datu bāzu nosaukumus utt. Kā mainīgos, jāizmanto dinamiskais SQL
Kļūda: declare @fname varchar(20) set @fname = 'FiledName' Atlasiet @fname no tableName -- Kļūda, netiek parādīta kļūda, bet rezultāts ir fiksēta vērtība FiledName, kas nav tas, ko vēlaties. Pareizi: Exec('select ' + @fname + ' from tableName') -- ievērojiet atstarpes pievienošanu vienpēdiņas malā pirms un pēc pluszīmes
Protams, jūs varat arī mainīt virkni mainīgā formā deklarēt @fname varchar(20) set @fname = 'FiledName' --Iestatiet lauka nosaukumu
deklarēt @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- Panākumi exec sp_executesql @s -- Šis teikums ziņos par kļūdu
--Piezīme: @s parametram jābūt ntext vai nchar vai nvarchar tipa, declare @s varchar(1000) ir jāmaina, lai deklarētu @s nvarchar(1000)
Šādi: deklarēt @s Nvarchar(1000) -- ņemiet vērā, ka šeit tas ir mainīts uz nvarchar(1000).
set @fname = 'FiledName' --Iestatiet lauka nosaukumu set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- Panākumi exec sp_executesql @s -- šis teikums ir pareizs
3. Ievades vai izejas parametri
(1) Ievades parametri: declare @QueryString nvarchar(1000) -- dinamiskā vaicājuma priekšraksta mainīgais (piezīme: jābūt ntext vai nchar nvarchar tipam, nevis varchar tipam) deklarēt @paramstring nvarchar(200) - iestatiet parametru virkni dinamiskajā priekšrakstā (piezīme: jābūt ntext vai nchar nvarchar tipam, nevis varchar tipam) deklarēt @input_id int - definē dinamiskajā paziņojumā nododamo parametru vērtību
iestatiet @QueryString='select * from tablename, kur id=@id' --id ir lauka nosaukums, @id ir parametrs, kas jānodod set @paramstring='@id int' -- Iestata virkni, kas definē dinamiskā priekšraksta parametrus iestatiet @input_id =1 -- Iestatiet dinamiskajā paziņojumā nododamā parametra vērtību uz 1 exec sp_executesql @querystring,@paramstring,@id=@input_id Ja ir vairāki parametri: declare @QueryString nvarchar(1000) -- dinamiskā vaicājuma priekšraksta mainīgais (piezīme: jābūt ntext vai nchar nvarchar tipam, nevis varchar tipam) deklarēt @paramstring nvarchar(200) - iestatiet parametru virkni dinamiskajā priekšrakstā (piezīme: jābūt ntext vai nchar nvarchar tipam, nevis varchar tipam) deklarēt @input_id int - definē parametra vērtību, kas jānodod dinamiskajā paziņojumā, 1. parametrs declare @input_name varchar(20) - definē argumenta vērtību, kas jānodod dinamiskajā priekšrakstā, parametrs 2
iestatiet @QueryString='atlasiet * no tabulas nosaukuma, kur id=@id un nosaukums=@name' --id un nosaukums ir lauku nosaukumi, un @id un @name ir parametri, kas jānodod set @paramstring='@id int,@name varchar(20)' -- Iestatiet dinamiskā priekšraksta parametru definīcijas virkni, atdalot ar "," iestatiet @input_id =1 -- Iestatiet dinamiskajā paziņojumā nododamā parametra vērtību uz 1 set @input_name='Zhang San' --Iestatiet dinamiskajā paziņojumā nododamā parametra vērtību uz 'Zhang San' exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Atzīmējiet argumentu secību (2) Izejas parametri Deklarēt @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --kā es varu ievietot izpildes rezultātu mainīgajā? declare @QueryString nvarchar(1000) -- dinamiskā vaicājuma nosaukuma mainīgais (Piezīme: jābūt ntext vai nchar nvarchar tipam, nevis varchar tipam) deklarēt @paramstring nvarchar(200) - iestatiet parametru virkni dinamiskajā priekšrakstā (piezīme: jābūt ntext vai nchar nvarchar tipam, nevis varchar tipam) deklarēt @output_result int - vaicājuma rezultāts tiek piešķirts @output_result
set @QueryString='select @totalcount=count(*) from tablename' --@totalcount ir izvades parametrs set @paramstring='@totalcount int output' --Iestatiet virkni, ko definē dinamiskā paziņojuma parametri, atdalot ar "," exec sp_executesql @querystring,@paramstring,@totalcount=@output_result izvade Atlasiet @output_result Protams, ievades un izejas parametrus var izmantot kopā, lai jūs to varētu izmēģināt pats. Turklāt, ja vēlaties izvadīt dinamiskā paziņojuma vaicājuma rezultātu kopu, es domāju tikai par šādu pagaidu tabulu izmantošanas metodi, es nezinu, vai jums ir labāks veids. IF object_id('[tempdb].[ dbo].#tmp') NAV NULLE -- Nosakiet, vai pagaidu tabula #tmp pastāv, un, ja tā pastāv, izdzēsiet to Nomest tabulas #tmp atlasiet * #tmp no tabulas nosaukuma, kur 1=2 -- Izveidojiet pagaidu tabulas #tmp ar tādu pašu struktūru kā tabulas nosaukums
declare @QueryString nvarchar(1000) -- dinamiskā vaicājuma nosaukuma mainīgais (Piezīme: jābūt ntext vai nchar nvarchar tipam, nevis varchar tipam) iestatīt @QueryString='atlasīt * no tabulas nosaukuma' ievietot #tmp(lauks1,lauks2,...) exec(@querystirng) |