天天看點

SQL server 動态查詢(表名或字段動态),并且擷取想得到的傳回值結果SQL server 動态查詢(表名或字段動态),并且擷取想得到的傳回值結果( exec sp_execute

       關 鍵 詞:  

在編寫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&amp;ad_type=10&amp;sys_id=1&amp;backurl=http%3A%2F%2Fbook.dangdang.com%2F">當當計算書籍 5-8折</a>

本文轉自Sam Lin部落格部落格園部落格,原文連結:http://www.cnblogs.com/samlin/archive/2009/06/04/1496408.html,如需轉載請自行聯系原作者