sql >> データベース >  >> RDS >> Sqlserver

変数としてのテーブル名

    質問のような静的クエリの場合、テーブル名と列名は静的である必要があります。

    動的クエリの場合は、完全なSQLを動的に生成し、sp_executesqlを使用して実行する必要があります。

    異なるデータベースの同じテーブル間でデータを比較するために使用されるスクリプトの例を次に示します。

    静的クエリ:

    SELECT * FROM [DB_ONE].[dbo].[ACTY]
    EXCEPT
    SELECT * FROM [DB_TWO].[dbo].[ACTY]
    

    tableの名前を簡単に変更したいので およびschema 、この動的クエリを作成しました:

    declare @schema varchar(50)
    declare @table varchar(50)
    declare @query nvarchar(500)
    
    set @schema = 'dbo'
    set @table = 'ACTY'
    
    set @query = 'SELECT * FROM [DB_ONE].[' + @schema + '].[' + @table + '] EXCEPT SELECT * FROM [DB_TWO].[' + @schema + '].[' + @table + ']'
    
    EXEC sp_executesql @query
    

    動的クエリには考慮する必要のある詳細が多く、保守が難しいため、次の内容を読むことをお勧めします。動的SQLの呪いと祝福



    1. Libpqを使用してiPhoneアプリをPostgreSQLに接続する

    2. リストPostgresENUMタイプ

    3. Oracleエイリアシングを理解する-2番目のクエリでラップされない限り、エイリアスがクエリで認識されないのはなぜですか?

    4. Oracle10gの左結合で削除