0

同じスキーマを持つテーブルを持つ複数のデータベースからデータを取得する必要があります。このために、データベースの 1 つで、このテーブルのシノニムを作成しました。データベースの数は、時間とともに増加します。したがって、データを取得する手順は柔軟にする必要があります。問題を解決するために、次のコード スニペットを作成しました。

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

また、ソリューションを簡素化する方法についてのアイデアにも感謝します。

4

2 に答える 2

1

実際には、すべてのテーブルから 1 つのテーブルにデータをインポートして (ソース テーブル名の列を追加することもできます)、それを使用することをお勧めします。インポートは、SP または SSIS パッケージを介して実行できます。

最初の質問について - exec ステートメントの TVF ラッパーを介してそれを実現できます (その中に exec .. を使用)。

UPD:コメントで気づいたように、 exec は TVF 内では機能しません。したがって、DB 構造を変更したくなく、多くのテーブルを使用する必要がある場合は、次のことをお勧めします。

  1. または synonym*** テーブルからすべてのデータを変数に選択し (1 行だけを選択しているように見えます)、それらを使用します
  2. または、完全なステートメント (挿入などを含む) 用に動的 SQL を準備し、ここでテーブル変数の代わりに一時テーブルを使用します。
于 2012-04-10T15:11:24.717 に答える