某些時(shí)候,我們希望直接傳遞字段名、表名、where條件甚至 SQL 語句本身等字符串到存儲(chǔ)過程,在存儲(chǔ)過程里將不同的參數(shù)值組合成不同的 SQL 語句執(zhí)行,Microsoft SQL Server 提供兩種方法實(shí)現(xiàn)這個(gè)目的。
一、使用 sp_executesql 系統(tǒng)存儲(chǔ)過程執(zhí)行 Unicode 字符串
1、直接組合 SQL 語句執(zhí)行
CREATE PROCEDURE p_Test1
@TableName varchar(20)
AS
declare @SQLString nvarchar(200)
set @SQLString = N'select * from ' + @TableName
EXECUTE sp_executesql @SQLString
2、SQL 語句里包含嵌入?yún)?shù)
CREATE PROCEDURE p_Test2
@TableName varchar(20),
@UserID int,
@UserName varchar(50)
AS
declare @SQLString nvarchar(200)
set @SQLString = N'select * from ' +
@TableName +
N' where UserID=@UserID or UserName=@UserName'
EXECUTE sp_executesql @SQLString,
N'@UserID int, @UserName varchar(50)',
@UserID, @UserName
這也是 Microsoft SQL Server 的推薦做法。
二、使用EXECUTE語句執(zhí)行字符串
CREATE PROCEDURE p_Test3
@TableName varchar(20)
AS
declare @SQLString nvarchar(200)
set @SQLString = N'select * from ' + @TableName
EXEC(@SQLString)
以上兩種方法支持在運(yùn)行時(shí)生成 Transact-SQL 腳本、存儲(chǔ)過程和觸發(fā)器中的SQL語句。有個(gè)遺憾之處則是包含 sp_executesql 或 EXECUTE 語句的批處理不能訪問執(zhí)行的字符串中定義的變量或局部游標(biāo),例如,這兩種方法就沒法用來做傳統(tǒng)的 ADO 分頁。
來源:博遠(yuǎn)電子(軟件定制),如涉及版權(quán)問題請(qǐng)與我們聯(lián)系。
TAG
軟件定制,軟件開發(fā),瀚森HANSEN,遼寧,沈陽,撫順