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'