2017-09-27 9 views
0

データウェアハウスの最初のテーブルを切り捨て、ローカルデータベースからDWHサーバーにデータをコピーするストアドプロシージャを作成しようとしています。ここでリンクされたサーバー上のテーブルを切り捨てる問題

はコードです:

USE [ARGTPAWN-DB-DWH].[DWH].[dbo].[PML]; 
GO 

TRUNCATE TABLE [ARGTPAWN-DB-DWH].[DWH].[dbo].[PML]; 
GO 

SELECT * 
INTO [ARGTPAWN-DB-DWH].[DWH].[dbo].[PML] 
FROM [14TPAWNDB001].[FLMedicaid].[dbo].[PML] 
GO 

そして、私は取得しています応答は次のとおりです。

メッセージ911、レベル16、状態1、行1
データベース 'ARGTPAWN-DB-DWH'存在しない。名前が正しく入力されていることを確認してください。

メッセージ4701、レベル16、状態1、行3
オブジェクト「PML」が存在しないか、権限がないため、オブジェクト「PML」が見つかりません。

Msg 117、レベル15、状態1、行7
オブジェクト名 'ARGTPAWN-DB-DWH.DWH.dbo.PML'には、接頭辞の最大数を超えています。最大値は2です。

サーバーは既にリンクされているため、問題はありませんが、なぜこれが機能しないのか不思議です。

+0

この手順はどのデータベースにありますか? – xQbert

+1

あなたのSQLは全く意味がありません。まず第一に、ストアドプロシージャはどこですか?あなたはテーブル/ビューとしてすべてを扱っているので、不明です。また、最初の行は完全に無効です。 'USE'は何をしていますか? – DavidG

+0

リンクサーバー上のテーブルを切り捨てるストアドプロシージャを実行しようとしていますか? – Tanner

答えて

1

リンクサーバーと分散クエリがパフォーマンスの項に注意が必要です...

あなたがホストするデータベースからそれを呼び出す場合でも、ターゲット表をホストするデータベースにストアドプロシージャを記述することを検討してくださいソース表。ターゲット・データベースで

CREATE PROCEDURE [DBO].[TARGET_SIDE_PS] 
AS 

-- For error handling. 
DECLARE @aERROR int 
DECLARE @aCOUNT int 

-- Start transaction. 
BEGIN TRANSACTION 

-- Drop target table. 
IF OBJECT_ID('dbo.PML', 'U') IS NOT NULL 
DROP TABLE dbo.PML; 
-- Error catching 
SELECT @aERROR = @@ERROR, @aCOUNT = @@ROWCOUNT 
IF @aERROR<>0 
BEGIN 
    -- Error : do what is needed. 
    -- 
    ROLLBACK TRANSACTION 
    RETURN 1 
END 

SELECT * 
INTO dbo.PML 
FROM [SOURCELINKEDSERVER].[SOURCEDATABASE].[dbo].[PML] 
-- Error catching 
SELECT @aERROR = @@ERROR, @aCOUNT = @@ROWCOUNT 
IF @aERROR<>0 
BEGIN 
    -- Error : do what is needed. 
    -- 
    ROLLBACK TRANSACTION 
    RETURN 2 
END 
IF @aCOUNT <= 0 
BEGIN 
    -- No data: do what is needed. 
    -- 
    PRINT 'NO DATA !!' 
END 
COMMIT TRANSACTION 
RETURN 0 

ソース側から(またはターゲット側からの)ターゲット側のPSを呼び出し、それが行われますが、ソース側のデータベースには、サイドデータベースをターゲットにリンクする必要があります。 トランザクションは、DROP/CREATE/INSERTシーケンスのため削除できます。

ソース側でoposite:PSを実行し、リンク先のターゲットサーバーデータベースにドロップして挿入できますが、理解する必要があります。 - トランザクションにはしばらく時間がかかります。 - すべてのソースデータはプロセス全体でロックされます。 - INSERTにはしばらく時間がかかります。

+0

ありがとうございました! –

+0

歓迎です^^ – clementakis

0

あなたは実行する必要はありません。

USE [ARGTPAWN-DB-DWH].[DWH].[dbo].[PML]; 

は、単純に以下の行を実行します。

0

ARGTPAWN-DB-DWHとは何ですか?これがサーバー名の場合は不要です。

USEステートメントは、データベースのみを参照する必要があります。

あなたSELECT * INTO...これはすでに、それは失敗します(これは、あなたがTRUNCATEを実行している場合、それは意志)が存在する場合、テーブルのPMLを作成しようとします - 利用INSERT INTO...またはその代わりに切り捨てのDROP TABLE...

SELECT *を使用しないでください。

+0

私はそれがリンクサーバーだと思います – Tanner

+0

リンクサーバーです。 –

関連する問題