在通常的存儲過程設計中,是不可以使用表名稱作為參數,實作表的動态性查詢的,因為在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,如需轉載請自行聯系原作者