我有一個場景,其中一個SP與動態查詢一起實現,我需要刪除該實現由於性能因素。這是一種導入功能,我們最初將我們的數據從excel插入臨時表,並從那裏驗證我們的數據,將數據保存到另一個臨時表中。如果所有驗證都通過,則將數據插入物理表中。什麼可能的方法來替換SQL SERVER中的動態查詢
登臺表可以有四種類別的數據(FParty,SParty,TParty,Owner),這些數據是從excel傳遞到一次登臺的。而這些類別的物理表包含不同數量的列。因此在運行時只有我們能夠知道數據的類別,然後我們必須相應地創建臨時表來驗證數據。
截至目前,我們正在使用動態查詢在運行時根據類別創建臨時表。程序如下:
CREATE procedure [dbo].[GetData_Into_Temptbl] (
,@CategoryType varchar(50) -- FParty, SParty, TParty, Owner)
BEGIN
declare Category cursor for
select Fields from dbo.StagingTable where CategoryName= @CategoryType
Open Category
Fetch Next from Category into @Field
while @@Fetch_status = 0
begin
set @FieldsToCreatetempTable = @ FieldsToCreatetempTable + ',' + @Field
Fetch Next from Category into @Field
end
close Category
deallocate Category
set @tblTemp = 'insert into #TempTableData ('[email protected]+')'
Exec(@tblTemp)
END
上面的代碼工作正常,但需要替換過程的動態性質。請提出任何概念。
你的性能問題更可能是由於光標少,由於動態SQL。您可能需要考慮刪除光標 – Raj
我覺得問題在於您一遍又一遍地調用此過程 - 並且逐行處理,而不是其中存在動態SQL。 –
感謝Raj提出這個問題,但我被要求刪除動態查詢,不管光標是什麼:( – PS078