我需要從多個數據庫中獲取具有相同模式的表的數據。爲此,我在其中一個數據庫中創建了這些表的同義詞。數據庫的數量將隨着時間而增長。所以,抓取數據的過程應該是靈活的。我寫了下面的代碼片段來解決問題:將EXEC語句傳遞給APPLY作爲參數
WHILE @i < @count
BEGIN
SELECT @synonymName = [Name]
FROM Synonyms
WHERE [ID] = @i
SELECT @sql = 'SELECT TOP (1) *
FROM [dbo].[synonym' + @synonymName + '] as syn
WHERE [syn].[Id] = tr.[Id]
ORDER BY [syn].[System.ChangedDate] DESC'
INSERT INTO @tmp
SELECT col1, col2
FROM
(
SELECT * FROM TableThatHasRelatedDataFromAllTheSynonyms
WHERE [Date] > @dateFrom
) AS tr
OUTER APPLY (EXEC(@sql)) result
SET @i = @i + 1
END
我也很欣賞,瞭解如何簡化解決方案的任何想法。
我會試試看,明天希望它能幫助我。你能給出更多關於「SP或SSIS」的細節嗎?其實我沒有明白你的意思。不幸的是,我無法將所有表格合併爲一個,因爲它們足夠大。 (SELECT * FROM Table1) - 使用Intel Xeon處理器和12 Gb RAM的服務器上的查詢需要30到60秒,並且我有多個表。使用「外部應用」查詢需要2-3秒的時間 – 2012-04-10 17:54:49
SP - 存儲過程。 SSIS - SQL Server集成服務。 TVF - 表值函數。 – oryol 2012-04-11 08:42:11
我試圖將查詢提取到TVF中時遇到了另一個問題:在函數中無效使用副作用運算符'EXECUTE STRING'。 – 2012-04-12 07:09:58