4

サーバーAに、ユーザーデータの列のセットを持つテーブルAがあります。これをサーバーBのテーブルBに挿入する必要があります。この挿入ステートメントを毎晩実行するストアドプロシージャを作成しました(以下のSQL)。プロシージャのいずれかの部分を選択して実行すると、正常に機能しますが、プロシージャ全体を実行しようとすると、エラーが発生します。

オブジェクト名ServerB.DatabaseB.dbo.TableBに、プレフィックスの最大数を超えています。最大は2です。

T-SQLステートメント:

IF EXISTS (SELECT * FROM SERVERA.DatabaseA.dbo.TableA)
BEGIN
 TRUNCATE TABLE SERVERB.DatabaseB.dbo.TableB
 INSERT INTO 
    SERVERB.DatabaseB.dbo.TableB
 SELECT 
   Firstname,
   Surname,
   Username
 FROM 
   SERVERA.DatabaseA.dbo.TableA
END 

誰かが私が間違っていることについて何か考えを持っていますか?

4

1 に答える 1

2

マニュアルによるTRUNCATE TABLEと、コマンドの構文は次のとおりです。

TRUNCATE TABLE 
    [ { database_name .[ schema_name ] . | schema_name . } ]
    table_name
[ ; ]

ご覧のとおり、このコマンドは3つ以下のコンポーネントで構成される名前のみをサポートします。つまり、でリンクされたサーバー名を指定することはできませんTRUNCATE TABLE

1つの解決策は、次のようにへのリモート呼び出しを使用することsp_executesqlです。

EXECUTE SERVERB.DatabaseB.sys.sp_executesql N'TRUNCATE TABLE dbo.TableB';
于 2012-12-04T18:22:41.267 に答える