3

複数の DB のテーブルで重複する電子メール アドレスを見つける方法を見つけようとしています。私は30個のDBを持っており、すべて同じフィールドを持つ「Users」テーブルがあります(各DBは私たちの異なる顧客です)。各 DB を調べて、このテーブルからメール アドレスを取得し、現在の DB と他のすべての DB でこのメール アドレスを検索する必要があります。存在する場合はレコードを書き出し、存在しない場合は次のユーザー レコードに移動して繰り返します。これが私がこれまでに得たものですが、行き詰まっています。別のカーソル内にカーソルを作成する必要があると思いますが、動的に実行できるかどうかわかりません:

DECLARE @DBName varchar(20)
DECLARE @sSQL      varchar(2000)

DECLARE LoopCursor CURSOR FOR
    SELECT DBName
    FROM Configuration

    OPEN LoopCursor

    FETCH NEXT FROM LoopCursor
    INTO @DBName

    WHILE @@FETCH_STATUS = 0
    BEGIN
        SET @sSQL = '
            Select EmailAddress
            FROM ' + @DBName + '.dbo.Users'

        --Not to sure what to do from here??

        EXEC(@sSQL)

        FETCH NEXT FROM LoopCursor
        INTO @DBName
    END

    CLOSE LoopCursor
DEALLOCATE LoopCursor

SELECT 'DONE'

SQL Server 2008 R2 を使用しています。

4

1 に答える 1

2

テストされていませんが、このようなものは、配置したテーブルにすべてをダンプする必要がありますdb.schema.DuplicateEmailAddresses

Declare @DBName varchar(20)
Declare @sql nvarchar(max)
Declare @join nvarchar(max) = ''

Declare LoopCursor Cursor For
    Select DBName
    From Configuration

Set @sql = N'Select EmailAddress Into db.schema.DuplicateEmailAddresses From ('

Open LoopCursor

Fetch Next From LoopCursor Into @DBName

While  @@FETCH_STATUS = 0
Begin
    Set @sql = @sql + @join + N'Select EmailAddress From ' + QuoteName(@DBName) + N'.dbo.Users'
    Set @join = N' Union All '
    Fetch Next From LoopCursor Into @DBName
End

Close LoopCursor
Deallocate LoopCursor

Set @sql = @sql + N') as tmp Group By EmailAddress Having Count(*) > 1'

exec sp_executesql @sql, N''
于 2012-11-02T15:24:42.627 に答える