日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 數(shù)據(jù)庫 > Sqlserver > SQL SERVER 動態(tài)執(zhí)行SQL sp_executesql與EXEC

SQL SERVER 動態(tài)執(zhí)行SQL sp_executesql與EXEC

來源:程序員人生   發(fā)布時間:2014-04-25 21:28:19 閱讀次數(shù):3020次

建議使用 sp_executesql 而不要使用 EXECUTE 語句執(zhí)行字符串。支持參數(shù)替換不僅使 sp_executesql 比 EXECUTE 更通用,而且還使 sp_executesql 更有效,因為它生成的執(zhí)行計劃更有可能被 SQL Server 重新使用。

自包含批處理
sp_executesql 或 EXECUTE 語句執(zhí)行字符串時,字符串被作為其自包含批處理執(zhí)行。SQL Server 將Transact-SQL 語句或字符串中的語句編譯進一個執(zhí)行計劃,該執(zhí)行計劃獨立于包含 sp_executesql 或 EXECUTE 語句的批處理的執(zhí)行計劃。下列規(guī)則適用于自含的批處理:

直到執(zhí)行 sp_executesql 或EXECUTE 語句時才將sp_executesql 或 EXECUTE 字符串中的 Transact-SQL 語句編譯進執(zhí)行計劃。執(zhí)行字符串時才開始分析或檢查其錯誤。執(zhí)行時才對字符串中引用的名稱進行解析。
執(zhí)行的字符串中的 Transact-SQL 語句,不能訪問 sp_executesql 或 EXECUTE 語句所在批處理中聲明的任何變量。包含 sp_executesql 或 EXECUTE 語句的批處理不能訪問執(zhí)行的字符串中定義的變量或局部游標。
如果執(zhí)行字符串有更改數(shù)據(jù)庫上下文的 USE 語句,則對數(shù)據(jù)庫上下文的更改僅持續(xù)到 sp_executesql 或 EXECUTE 語句完成。
通過執(zhí)行下列兩個批處理來舉例說明:

/* Show not having access to variables from the calling batch. */
DECLARE @CharVariable CHAR(3)
SET @CharVariable = 'abc'
/* sp_executesql fails because @CharVariable has gone out of scope. */
sp_executesql N'PRINT @CharVariable'
GO

/* Show database context resetting after sp_executesql completes. */
USE pubs
GO
sp_executesql N'USE Northwind'
GO
/* This statement fails because the database context
has now returned to pubs. */
SELECT * FROM Shippers
GO

替換參數(shù)值
sp_executesql 支持對 Transact-SQL 字符串中指定的任何參數(shù)的參數(shù)值進行替換,但是 EXECUTE 語句不支持。因此,由 sp_executesql 生成的 Transact-SQL 字符串比由 EXECUTE 語句所生成的更相似。SQL Server 查詢優(yōu)化器可能將來自 sp_executesql 的 Transact-SQL 語句與以前所執(zhí)行的語句的執(zhí)行計劃相匹配,以節(jié)約編譯新的執(zhí)行計劃的開銷。

使用 EXECUTE 語句時,必須將所有參數(shù)值轉(zhuǎn)換為字符或 Unicode 并使其成為 Transact-SQL 字符串的一部分:

DECLARE @IntVariable INT
DECLARE @SQLString NVARCHAR(500)
/* Build and execute a string with one parameter value. */
SET @IntVariable = 35
SET @SQLString = N'SELECT * FROM pubs.dbo.employee WHERE job_lvl = ' +
CAST(@IntVariable AS NVARCHAR(10))
EXEC(@SQLString)
/* Build and execute a string with a second parameter value. */
SET @IntVariable = 201
SET @SQLString = N'SELECT * FROM pubs.dbo.employee WHERE job_lvl = ' +
CAST(@IntVariable AS NVARCHAR(10))
EXEC(@SQLString)

如果語句重復(fù)執(zhí)行,則即使僅有的區(qū)別是為參數(shù)所提供的值不同,每次執(zhí)行時也必須生成全新的 Transact-SQL 字符串。從而在下面幾個方面產(chǎn)生額外的開銷:

SQL Server 查詢優(yōu)化器具有將新的 Transact-SQL 字符串與現(xiàn)有的執(zhí)行計劃匹配的能力,此能力被字符串文本中不斷更改的參數(shù)值妨礙,特別是在復(fù)雜的 Transact-SQL 語句中。
每次執(zhí)行時均必須重新生成整個字符串。
每次執(zhí)行時必須將參數(shù)值(不是字符或 Unicode 值)投影到字符或 Unicode 格式。
sp_executesql 支持與 Transact-SQL 字符串相獨立的參數(shù)值的設(shè)置:

DECLARE @IntVariable INT
DECLARE @SQLString NVARCHAR(500)
DECLARE @ParmDefinition NVARCHAR(500)

/* Build the SQL string once. */
SET @SQLString =
N'SELECT * FROM pubs.dbo.employee WHERE job_lvl = @level'
/* Specify the parameter format once. */
SET @ParmDefinition = N'@level tinyint'

/* Execute the string with the first parameter value. */
SET @IntVariable = 35
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@level = @IntVariable
/* Execute the same string with the second parameter value. */
SET @IntVariable = 32
EXECUTE sp_executesql @SQLString, @ParmDefinition,
@level = @IntVariable

此 sp_executesql 示例完成的任務(wù)與前面的 EXECUTE 示例所完成的相同,但有下列額外優(yōu)點:

因為 Transact-SQL 語句的實際文本在兩次執(zhí)行之間未改變,所以查詢優(yōu)化器應(yīng)該能將第二次執(zhí)行中的 Transact-SQL 語句與第一次執(zhí)行時生成的執(zhí)行計劃匹配。這樣,SQL Server 不必編譯第二條語句。
Transact-SQL 字符串只生成一次。
整型參數(shù)按其本身格式指定。不需要轉(zhuǎn)換為 Unicode。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 精品国产欧美一区二区三区成人 | 日韩 国产 欧美 | 一区二区三区日韩欧美 | 国产精品自产拍在线观看桃花 | 激情视频网| 亚洲福利影院 | 成人免费视频观看 | 国产精品久久久久久久久久久久久 | 亚洲精品影视 | 亚洲一区网站 | 精品欧美一区二区精品久久 | 91精品久久久久久 | 成年人视频免费在线观看 | 三级网站 | 男人的天堂亚洲 | 99在线精品视频 | 久久久久久久久网站 | 五月婷婷在线播放 | 黄色av免费观看 | 亚洲欧洲网站 | 精品久久久久久久久久久 | 久久毛片 | 日韩精品中文字幕一区二区 | 91国内精品久久 | 成年人免费观看视频网站 | 国产女人成人精品a区 | 欧美激情在线一区 | 成人免费观看在线 | 天天操夜夜撸 | 手机看av网站| 亚洲精品国产视频 | 最近中文文幕天免费 | 美女二区| 操操片| www.成人在线 | 日韩一区二区三区精品视频 | 神马久久一区二区 | 国产玖玖视频 | www.射| 国产在线精品一区 | 欧美一级做a爰片久久高潮 亚洲一级一级 |