3

あるデータベースから別のデータベースにテーブルをコピーする必要があります。私の最初の推測は、ソース コードから次のステートメントを使用することでした。

SELECT *  
INTO TARGETDB.SCHEMA.TABLENAME  
FROM SCHEMA.TABLENAME  

(編集:主キーなどを設定しないことはわかっていますが、それで問題ありません)

悲しいことに、私のプロジェクトで使用しなければならないクラスは、このステートメントをほとんど破壊しており、それを回避する可能性はありません.

次のアイデアは、SQL Server データベースに関数またはプロシージャを作成することでした。

SCHEMA.FUNCTNAME paramTARGETDB, paramTABLENAME  

私のコードからのステートメントとして。

私の現在の手順は次のようになります。

CREATE PROCEDURE [SCHEMA].FUNCTNAME
    @pVC_TARGETDB VARCHAR(240),
    @pVC_TABLENAME VARCHAR(240)  
AS
BEGIN
  SELECT *
  INTO @pVC_TARGETDB.SYSADM.@pVC_TABLENAME
  FROM SCHEMA.@pVC_TABLENAME
END

しかし、SQL に関する私の知識はそれほど大きくなく、SQL Server Management Studio は構文エラーがあることを教えてくれます。すべて@pVC_*がマークされています (編集: 最初の 2 つの出現では、マークされていません。BEGIN と END の間のブロックのみ)。私が受け取るメッセージは次のとおりです。

「@pVC_* 付近の構文エラー ID、QUOTED_ID または '.' が必要です。」

想像できる、またはGoogleで見つけられるほぼすべての書き方を試しましたが、簡単に解決できるかもしれませんし、そうでないかもしれません。できませんでした、助けてください。

4

1 に答える 1

2

SQLステートメントを動的に作成して実行できます

DECLARE @SQL NVARCHAR(MAX)

SET @SQL =
('SELECT *
INTO ' + @pVC_TARGETDB + '.SYSADM.' + @pVC_TABLENAME +
' FROM
SCHEMA.' + @pVC_TABLENAME)

EXEC (@SQL)
于 2013-02-07T12:34:50.343 に答える