55

次のデータを含むテーブルがあります。

Pk_Id  ProductName           Fk_CompanyId       Price
------------------------------------------------------
1      AMX                   1                  10.00
2      ABC                   1                  11.00
3      APEX                  1                  12.00
4      AMX                   1                  10.00
5      ABC                   1                  11.00
6      APEX                  1                  12.00
7      AMX                   2                  10.00
8      ABC                   2                  11.00
9      APEX                  2                  12.00

Fk_CompanyId が 1 のレコードを移行するための Insert スクリプトを生成したいと考えています。

すべてのレコードのスクリプトを生成するスクリプト挿入オプションがありますが、一部のレコードをフィルタリングして別のデータベースに移行したいと考えています。

4

12 に答える 12

26
CREATE PROCEDURE sp_generate_insertscripts
(
    @TABLENAME VARCHAR(MAX),
    @FILTER_CONDITION VARCHAR(MAX)=''   -- where TableId = 5 or some value
)
AS
BEGIN

SET NOCOUNT ON

DECLARE @TABLE_NAME VARCHAR(MAX),
        @CSV_COLUMN VARCHAR(MAX),
        @QUOTED_DATA VARCHAR(MAX),
        @TEXT VARCHAR(MAX),
        @FILTER VARCHAR(MAX) 

SET @TABLE_NAME=@TABLENAME

SELECT @FILTER=@FILTER_CONDITION

SELECT @CSV_COLUMN=STUFF
(
    (
     SELECT ',['+ NAME +']' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @QUOTED_DATA=STUFF
(
    (
     SELECT ' ISNULL(QUOTENAME('+NAME+','+QUOTENAME('''','''''')+'),'+'''NULL'''+')+'','''+'+' FROM sys.all_columns 
     WHERE OBJECT_ID=OBJECT_ID(@TABLE_NAME) AND 
     is_identity!=1 FOR XML PATH('')
    ),1,1,''
)

SELECT @TEXT='SELECT ''INSERT INTO '+@TABLE_NAME+'('+@CSV_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '+@TABLE_NAME + @FILTER

--SELECT @CSV_COLUMN AS CSV_COLUMN,@QUOTED_DATA AS QUOTED_DATA,@TEXT TEXT

EXECUTE (@TEXT)

SET NOCOUNT OFF

END
于 2016-04-06T09:30:58.337 に答える
7

私は実際に、アドインやプロセスを使用せずに、ほんの数ステップで SSMS でこれを実現できました。1) テーブル全体が必要ない場合は、データベース内の新しいテーブルに必要な列とレコードを選択しますSELECT col1, col2 ... INTO TempRecs 。2) SSMS のスクリプト生成機能を使用して、データベースを右クリックして INSERT ステートメントを生成します (タスク > スクリプトの生成)。 > オブジェクトを選択 > 一時テーブルを選択 > [詳細設定] ボタンをクリック > [スクリプトへのデータの種類] を [データのみ] に変更 > [完了])。3) 一時テーブル名の結果の INSERT ステートメントを検索して、目的のインポート テーブル名に置き換えます。

于 2016-05-04T15:48:17.483 に答える
4

DBeaverクライアント (SQL Server をサポート) を使用すると、必要なレコードを使用して SELECT クエリを実行し、結果の行を選択し、右クリックして SQL としてコピーすると、クリップボードに INSERT ステートメントが作成されます。

ここに画像の説明を入力



HeidiSQLは、SQL Server への接続と選択した行のエクスポートもサポートしています (SQL クエリ自体で行をフィルター処理するか、すべての行を取得してデータ グリッドで選択することができます)。

ここに画像の説明を入力

于 2021-06-02T15:09:55.707 に答える