天天看點

如何使用表名做為參數實作存儲過程的設計

在通常的存儲過程設計中,是不可以使用表名稱作為參數,實作表的動态性查詢的,因為在Sql Server中,表是有結構的,與普通的sql變量不同。但是,可以利用系統的兩個存儲過程來實作。

     這次,在實際項目中,着實考慮了如何提升應用程式性能來使用存儲過程的優勢,因為程式對通信速度的要求,不得不寫大量的存儲過程來實作。下面結合一個例子,相信大家會更加清晰。

CREATE Procedure GetHighByTeam  @tableName nvarchar(20),@startDate nvarchar(20),@endDate nvarchar(20),@teamNo nvarchar(1)

AS//功能:通過班次得到溫度最高值

declare @sSql nvarchar(4000),@i int

set @sSql = 'select  '

set @i = 1

while @i < 16

begin

   set    @sSql = @sSql + ltrim(convert(varchar(3), @i))+ '  AS Seq,tempDate,tempTime,p'+ltrim(convert(varchar(3), @i))+' AS Point From  '  + @tableName

   set    @sSql = @sSql + '  and teamNo =' + @teamNo

   set    @sSql = @sSql + '  Union  Select '

   set    @i = @i+1

end

   set    @sSql = @sSql + ltrim(convert(varchar(3), @i)) + '  AS Seq ,tempDate,tempTime,p'+ltrim(convert(varchar(3), @i)) + ' AS Point From  '  + @tableName

   set    @sSql = @sSql +'  and teamNo =' + @teamNo

EXECUTE sp_executesql @sSql

GO

這個存儲過程的實作大家可以不去考慮,隻需要注意标紅的地方,使用系統的存儲過程sp_executesql 儲過程的實作大家可以傳遞表名稱,進而實作所需要的傳遞表名作為參數的需要。

具體在DELPHI中如何使用存儲過程,請參看我在 DELPHI 部分寫的《DELPHI存儲過程調用》。

本文轉自 august 51CTO部落格,原文連結:http://blog.51cto.com/august/6904,如需轉載請自行聯系原作者