SQL server 動態查詢(表名或欄位動態),並且擷取想得到的傳回值結果

來源:互聯網
上載者:User
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'

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.