關 鍵 詞:
在編寫sql語句或存儲過程中,難免會有碰到語句中表名或某一字段名不确定,要根據條件來,這時,我們可考慮用SQL 提供的sp_executesql 函數,,他可執行動态的修改,删除,查詢功能,至于此函數的詳細解釋可到sql幫助文檔中去檢視,下面我将舉一個動态查詢的列子,包括表名及想查詢的字段均不确定:
tab:
(ID int) (A numeric(9,2)) (B numeric(9,2))
===============================================
1 20.30 33.12
2 34.32 22.66
3 45.54 99.19
完成任務:
在不确定表名,及查詢字段的情況下,根據傳入的表名及字段及查詢條件,獲得對應傳回結果:
1.seq條件
2.字段名稱(A或B)
3.表名
要求函數傳回值類型為numeric(9,2), 列如根據輸入參數2取對應字段的值傳回
做法如下:
declare @tab varchar(10), @rowname varchar(10) ,@seq int
declare @sql Nvarchar(1000)
declare @v numeric(9,2)
set @rowname='A';
set @seq=2 ;
set @tab='tab';
set @sql='select @a='+@rowname+' from '+@tab+' where id='+rtrim(@seq)
exec sp_executesql @sql,N'@a numeric(9,2) output',@v output
select @v
=============結果===========
34.32
提醒:
對于動态表名及字段使用非常簡單,但擷取結果使用動态語句是有一定規則的,如上面的列子,需要把表名聲明成Nvarchar的,然後執行動态語句時,聲明其動态語句中變量前也要加N ,如N'@a numeric(9,2) output'
<b>作者贊賞</b>
<a href="http://union.dangdang.com/transfer.php?from=P-262177&ad_type=10&sys_id=1&backurl=http%3A%2F%2Fbook.dangdang.com%2F">當當計算書籍 5-8折</a>
本文轉自Sam Lin部落格部落格園部落格,原文連結:http://www.cnblogs.com/samlin/archive/2009/06/04/1496408.html,如需轉載請自行聯系原作者