1: A szokásos SQL utasítások végrehajthatók az exec
Válassz * from tableName exec('select * from tableName') exec sp_executesql N'select * from tableName' -- Fontos megjegyezni, hogy N-t kell hozzáadni a string előtt
2: Amikor mezőneveket, táblapokat, adatbázisneveket stb. használunk változóként, dinamikus SQL-t kell használni
Kijelentés @fname Varchar(20) set @fname = 'FiledName' Válaszd ki a @fname a tableName közül -- Hiba, hiba nem jelentkezik, de az eredmény fix értékű FiledName lesz, ami nem az, amit szeretnél. exec('select ' + @fname + ' from tableName') – megjegyzem, hogy egy szóköz kerül az egyetlen idézőjel oldalára a plusz jel előtt és után
Természetesen a stringet változó alakra is lehet változtatni Kijelentés @fname Varchar(20) Állítsd @fname = 'FiledName' --Állítsd be a mező nevét
deklaráld @s varchar(1000) állítsd @s = 'select ' + @fname + ' a tableName-ből' exec(@s) -- siker vezető sp_executesql @s -- Ez a mondat hibát fog jelenteni
deklaráld @s Nvarchar(1000) -- itt megjegyezzük, hogy a nevét nvarchar(1000)-re változtatják. állítsd @s = 'select ' + @fname + ' a tableName-ből' exec(@s) -- siker Executive sp_executesql @s – ez a mondat helyes
3. Kimeneti paraméterek Declare @num int, @sqls nvarchar(4000) állítsuk @sqls='select count(*) from tableName' exec(@sqls)
--hogyan tehetem be az exec végrehajtás eredményét egy változóba?
Declare @num int, @sqls nvarchar(4000) állítsa @sqls='select @a=count(*) a tableName ' exec sp_executesql @sqls,N'@a int output', @num output Válassz @num
1: A szokásos SQL utasítások végrehajtási feladatok végrehajtási példája: Válassz * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- Fontos megjegyezni, hogy N-t kell hozzáadni a string előtt
2: Amikor mezőneveket, táblapokat, adatbázisneveket stb. használunk változóként, dinamikus SQL-t kell használni
Hiba: deklarate @fname varchar(20) set @fname = 'FiledName' Válaszd ki a @fname a tableName közül -- Hiba, hiba nem jelentkezik, de az eredmény fix értékű FiledName lesz, ami nem az, amit szeretnél. Helyes: Exec('select ' + @fname + ' from tableName') – figyeld meg, hogy egy hely van a idézőjel oldalára a plusz jel előtt és után
Természetesen a stringet változó alakra is lehet változtatni Kijelentés @fname Varchar(20) Állítsd @fname = 'FiledName' --Állítsd be a mező nevét
deklaráld @s varchar(1000) állítsd @s = 'select ' + @fname + ' a tableName-ből' Exec(@s) -- Siker vezető sp_executesql @s -- Ez a mondat hibát fog jelenteni
--Megjegyzés: @s paraméternek ntext, nchar vagy nvarchar típusúnak kell lennie, deklare-t kell @s varchar(1000) módosítani, hogy @s nvarchar(1000) deklaráljon
A következők: deklaráld @s Nvarchar(1000) -- itt megjegyezzük, hogy a nevét nvarchar(1000)-re változtatják.
Állítsd @fname = 'FiledName' --Állítsd be a mező nevét állítsd @s = 'select ' + @fname + ' a tableName-ből' Exec(@s) -- Siker Executive sp_executesql @s – ez a mondat helyes
3. Bemeneti vagy kimeneti paraméterek
(1) Bemeneti paraméterek: Declare @QueryString nvarchar(1000) -- dinamikus lekérdezési utasítás változó (megjegyzés: ntext vagy nchar nvarchar típusúnak kell lennie, nem varchar típusnak) Declare @paramstring nvarchar(200) - Állítsd be a paraméterláncot a dinamikus állításban (megjegyzés: ntext vagy nchar nvarchar típusnak kell lennie, nem varchar típusnak) declare @input_id int - Meghatározza a dinamikus állításba továbbítandó paraméterek értékét
Állítsuk be @QueryString='select * from tablename, ahol id=@id' --id a mező neve, @id a továbbítandó paraméter küme @paramstring='@id int' -- A dinamikus állítás paramétereit definiáló stringet állítja be @input_id =1 -- Állítsuk be a dinamikus állításban átadandó paraméter értékét 1-re exec sp_executesql @querystring,@paramstring,@id=@input_id Ha több paraméter létezik: Declare @QueryString nvarchar(1000) -- dinamikus lekérdezési utasítás változó (megjegyzés: ntext vagy nchar nvarchar típusúnak kell lennie, nem varchar típusnak) Declare @paramstring nvarchar(200) - Állítsd be a paraméterláncot a dinamikus állításban (megjegyzés: ntext vagy nchar nvarchar típusnak kell lennie, nem varchar típusnak) declare @input_id int - Megadja annak a paraméternek az értékét, amelyet a dinamikus utasításba kell továbbítani, 1. paraméter declare @input_name varchar(20) - definiálja az argumentus értékét, amelyet a dinamikus állításba kell továbbítani, 2. paraméter
Állítsuk be @QueryString='select * from tablename-ből, ahol id=@id és name=@name' --id és name mezőnevek, @id és @name pedig a továbbítandó paraméterek A @paramstring='@id int,@name varchar(20)' halmaz – Állítsuk be a dinamikus állítás paramétereinek definíciójának stringjét, elválasztva "," @input_id =1 -- Állítsuk be a dinamikus állításban átadandó paraméter értékét 1-re Állítsuk @input_name='Zhang San' --Állítsuk be a dinamikus utasításban átadandó paraméter értékét 'Zhang San'-nak exec sp_executesql @querystring,@paramstring,@id=@input_id,@name=@input_name -- Figyeld meg az érvek sorrendjét (2) Kimeneti paraméterek Declare @num int, @sqls nvarchar(4000) állítsuk @sqls='select count(*) from tableName' exec(@sqls) --hogyan tehetem be az exec végrehajtás eredményét egy változóba? declare @QueryString nvarchar(1000) -- dinamikus lekérdezésnév változó (Megjegyzés: ntext vagy nchar nvarchar típusnak kell lennie, nem varchar típusnak) Declare @paramstring nvarchar(200) - Állítsd be a paraméterláncot a dinamikus állításban (megjegyzés: ntext vagy nchar nvarchar típusnak kell lennie, nem varchar típusnak) Declare @output_result int – a lekérdezés eredménye a @output_result
A @QueryString='select @totalcount=count(*) a Tablename-ből' --@totalcount a kimeneti paraméter Állítsuk @paramstring='@totalcount int output' --Állítsuk be a dinamikus állítás paramétereivel definiált stringet, elválasztva "," exec sp_executesql @querystring,@paramstring,@totalcount=@output_result kimenet Válassz @output_result Természetesen a bemeneti és kimeneti paraméterek együtt is használhatók, így kipróbálhatod magad. Ezen felül, ha dinamikus utasításlekérdezés eredményhalmazát szeretnéd kiadni, csak a következő módszerre gondolok, az ideiglenes táblák használatával, nem tudom, van-e jobb megoldásod. IF object_id('[tempdb].[ dbo].#tmp') NEM NULL -- Határozd meg, hogy létezik-e az ideiglenes tábla #tmp, és ha van, töröld Dobd le az asztalt #tmp A TableName #tmp jelölése a TableName helyéről, ahol 1=2 -- Létrehozz egy ideiglenes tábla#tmp ugyanazzal a struktúrával, mint a TableName
declare @QueryString nvarchar(1000) -- dinamikus lekérdezésnév változó (Megjegyzés: ntext vagy nchar nvarchar típusnak kell lennie, nem varchar típusnak) Állítsa @QueryString='Select * from Tablename' beillesztés be #tmp(field1,field2,...) exec(@querystirng) |