<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Sql Server查詢語句中使用變數表示表名、欄位名等動態查詢方式叫動態查詢。
當需要根據外部輸入的引數來決定要執行的SQL語句時,常常需要動態來構造SQL查詢語句,用得比較多的地方就是分頁儲存過程和執行搜尋查詢的SQL語句。
一個比較通用的分頁儲存過程,可能需要傳入表名,欄位,過濾條件,排序等引數,而對於搜尋的話,可能要根據搜尋條件判斷來動態執行SQL語句。
在SQL Server中有兩種方式來執行動態SQL語句,分別是sp_executesql和exec。
sp_executesql相對而言具有更多的優點,它提供了輸入輸出介面,可以將輸入輸出變數直接傳遞到SQL語句中,exec只能通過拼接的方式來實現,安全性沒有executesql高。還有一個優點就是sp_executesql,能夠重用執行計劃,這就大大提高了執行的效能。所以一般情況下建議選擇sp_executesql來執行動態SQL語句。
使用儲存過程,提供了輸入輸出的介面,語句可以重用執行。
使用sp_executesql需要注意它後面執行的SQL語句必須是Unicode編碼的字串,所以在宣告儲存動態SQL語句的變數時必須宣告為nvarchar型別,否則在執行的時候會報“過程需要型別為 'ntext/nchar/nvarchar' 的引數 '@statement'”的錯誤,如果是使用sp_executesql直接執行SQL語句,則必須在前面加上大寫字母N,以表明後面的字串是使用Unicode型別編碼的。
語法:
sp_executesql [ @stmt = ] statement [ { , [ @params = ] N'@parameter_name data_type [ OUT | OUTPUT ][ ,...n ]' } { , [ @param1 = ] 'value1' [ ,...n ] } ]
declare @TableName varchar(50), @SqlString nvarchar(200), @CourseID int; set @TableName = '課程表'; set @CourseID = 1; set @SqlString = N'select * from ' + quotename(@TableName) + N'where ID = ' + cast(@CourseID as varchar(10)); exec sp_executesql @SqlString;
declare @sql as nvarchar(100); set @sql = N'SELECT orderid,custid,empid,orderdate FROM Sales.Orders WHERE <a href="mailto:orderid=@orderid;'" rel="external nofollow" target="_blank">orderid=@orderid;</a>'; exec sys.sp_executesql @stmt = @sql, @params = N'@orderid AS INT', @orderid = 10248;
create procedure sp_GetNameByUserId(@userId varchar(100), @userName varchar(100) output) as declare @sql nvarchar(1000); set @sql=N'select @userName=UserName from Student where UserId=@userId'; exec sp_executesql @sql,N'@userId varchar(100),@userName varchar(100) output', @userId, @userName output; select @userName;
綜合範例:兩個輸入引數和一個輸出引數
declare @count int, @tableName nvarchar(50), @SQLString nvarchar(max), @proid int, @id int, @ParmDefinition nvarchar(max); set @tableName=N'mytable'; set @proid=433; set @id=159; --set @sql=N'select @count=count(empid) from table27' set @SQLString=N'select @countOUT=count(empid) from ' + @tableName + N' where proid=@proid1 and id<@id1'; set @ParmDefinition=N'@proid1 int,@id1 int,@countOUT int output'; exec sp_executesql @SQLString, @ParmDefinition, @proid1=@proid, @id1=@id, @countOUT=@count output; select @count;
支援普通字元和Unicode字元。exec沒有輸入輸出引數,只能通過拼接的方式來實現。注意跳脫字元‘的使用。
declare @sql as nvarchar(100); set @sql = N'PRINT ''這條訊息是動態SQL命令列印的.'';'; exec (@sql); declare @sql as nvarchar(100); declare @OrderIDs as nvarchar(50) = N'10248,10249,10250'; set @sql = N'SELECT * FROM Sales.Orders WHERE orderid IN (' + @OrderIDs + N');'; exec (@sql);
到此這篇關於SQL Server中執行動態SQL的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45