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

OPENROWSETは、引数に変数を受け入れません(SQL Server)

    OPENROWSETを使用しようとしている場合 SQL Serverでアドホック分散クエリを実行しますが、「不正な構文」エラーが発生し続け、構文に問題がない場合は、次のいずれかの変数を使用しようとしている可能性があります。引数。

    この投稿のタイトルに記載されているように、OPENROWSET 引数に変数を受け入れません。

    変数を引数として使用している場合は、これらを文字列リテラルに変更してみてください。

    実例を示します。

    DECLARE @tsql varchar(500);
    SET @tsql = 'SELECT * FROM Test.dbo.Cats';
    SELECT * FROM OPENROWSET(
        'SQLNCLI', 
        'Server=MyLinkedServer;Trusted_Connection=yes;', 
        @tsql);

    結果:

    Msg 102, Level 15, State 1, Line 16
    Incorrect syntax near '@tsql'.

    Microsoftのドキュメントを確認すると、次のように明示されていることがわかります。

    OPENROWSET 引数に変数を受け入れません。

    したがって、すべての引数が文字列リテラルになるように上記のコードを変更しても、エラーは発生しなくなります。

    SELECT * FROM OPENROWSET(
        'SQLNCLI', 
        'Server=MyLinkedServer;Trusted_Connection=yes;', 
        'SELECT * FROM Test.dbo.Cats');

    結果:

    +---------+-------------+
    | CatId   | CatName     |
    |---------+-------------|
    | 1       | Meow        |
    | 2       | Fluffy      |
    | 3       | Scratch     |
    | 4       | Bulldog     |
    | 5       | King George |
    | 6       | Sharp       |
    | 7       | Fritz       |
    | 8       | Garfield    |
    | 9       | Boss        |
    +---------+-------------+

    1. 断片化が実行計画に与える影響

    2. Pythonのプロセス間でpostgresdbへの接続を共有する

    3. Djangoフィクスチャが失敗し、DatabaseError:値が長すぎて文字が変化しない(50)

    4. MySQL –ランダム番号を生成する方法