Mengonversi hasil Select menjadi Sisipkan skrip - SQL Server [ditutup]

107

Saya punya SQL Server 2008, SQL Server Management Studio.

Saya perlu memilih data dari Table1dalam database1. Kemudian saya harus mengedit beberapa nilai di hasil dan insert values into Table1di database2.

Atau izinkan saya mengatakannya dengan cara lain.

Bagaimana cara mengubah data dalam satu tabel menjadi insert script.

Kapten Komik
sumber
Apakah database di server yang sama? Jika demikian Anda dapat memasukkan dari satu ke yang lain. Masukkan ke database2.dbo.myTable pilih data dari database1.dbo.anOtherTable
u07ch
Ya, kedua database berada di server yang sama. Tapi saya butuh skrip. Saya akan memberikan skrip ini ke petugas database kami.
Captain Comic
Ini akan membantu untuk memperjelas pertanyaan. Apakah ada pendekatan yang berhasil atau apakah Anda memerlukan skrip sisipan yang dapat Anda serahkan ke dba Anda?
Greg

Jawaban:

31

SSMS Toolpack (yang GRATIS seperti bir) memiliki berbagai fitur hebat - termasuk menghasilkan pernyataan INSERT dari tabel.

Pembaruan: untuk SQL Server Management Studio 2012 (dan yang lebih baru), SSMS Toolpack tidak lagi gratis, tetapi memerlukan biaya lisensi yang sederhana.

marc_s
sumber
+1 @marc_s Saya melakukan banyak pekerjaan membuat skrip penyisipan seperti unsing skrip generator T-SQL dan sekarang Anda memberi tahu saya bahwa ada alat.
bernd_k
Hati-hati saat tabel menyimpan data uang . Tipe data tersebut dapat menyimpan lebih banyak tempat desimal daripada yang biasanya ditampilkan atau dalam skrip yang dihasilkan oleh SSMS Toolpack
bernd_k
13
Ini tidak lagi gratis. ssmstoolspack.com/Licensing
greg
@ Greg: terima kasih telah menunjukkan hal itu. Catatan: bahwa lisensi hanya berlaku untuk SQL Server Management Studio 2012 dan yang lebih baru - untuk versi sebelumnya, toolpack masih gratis.
marc_s
4
Alternatif untuk SSMS Toolpack ?
Kiquenet
155

Berikut metode lain, yang mungkin lebih mudah daripada memasang plugin atau alat eksternal dalam beberapa situasi:

  • Lakukan .select [whatever you need]INTO temp.table_namefrom [... etc ...]
  • Klik kanan pada database di Object Explorer => Tasks => Generate Scripts
  • Pilih temp.table_namedi layar "Pilih Objek", klik Berikutnya.
  • Di layar "Tentukan bagaimana skrip harus disimpan":
    • Klik Lanjutan, temukan properti "Jenis data ke Skrip", pilih "Hanya data", tutup properti lanjutan.
    • Pilih "Simpan ke jendela kueri baru" (kecuali Anda memiliki ribuan catatan).
  • Klik Berikutnya, tunggu pekerjaan selesai, amati INSERTpernyataan yang dihasilkan muncul di jendela kueri baru.
  • Gunakan Temukan & Ganti untuk mengubah semua [temp.table_name]menjadi [your_table_name].
  • drop table [temp.table_name].
KT.
sumber
Menggunakan INTO temp.table1 menghasilkan kesalahan berikut: Nama skema yang ditentukan "temp" tidak ada atau Anda tidak memiliki izin untuk menggunakannya. Saya menggunakan SQL 2012.
Tandai
3
tempdi sini mengacu pada skema apa pun yang aksesnya Anda miliki. Anda dapat membuat satu ( create schema temp) dan kemudian menghapusnya setelah Anda selesai, atau (lebih baik) cukup menggunakan skema apa pun yang sedang Anda kerjakan.
KT.
1
Terima kasih untuk ini, saya tahu pasti ada jalan! Ngomong-ngomong, Anda bisa melewati pembuatan tabel temp jika Anda hanya memerlukan seluruh data dari tabel yang ingin Anda skrip.
FAB
Saya harus menggunakan ini untuk mengimpor data ke Azure Database. Impor ke database non-azure lalu ekstrak sebagai sisipan SQL.
m12lrpv
2
Itu masih mengherankan saya bahwa SSMS belum menambahkan kemampuan ini 'lihat keluaran sebagai skrip sisipkan' pada set hasil .. tetapi pendekatan di atas berfungsi, meskipun itu membuat perintah penyisipan individu daripada melakukan penyisipan massal yang tepat (katakanlah 1.000 item per penyisipan ) seperti seharusnya. Ini bisa memakan waktu lama untuk dijalankan pada set hasil yang sangat besar
Traderhut Games
60

Di SSMS:

  • Klik kanan pada database> Tasks> Generate Scripts

  • Lanjut

  • Pilih "Pilih objek database tertentu" dan centang tabel yang Anda inginkan dalam skrip, Berikutnya

  • Klik Advanced > dalam daftar opsi, gulir ke bawah ke bawah dan cari "Jenis data ke skrip" dan ubah ke "Hanya Data"> OK

  • Pilih "Simpan ke jendela kueri baru"> Berikutnya> Berikutnya> Selesai

Semua 180 baris sekarang ditulis sebagai 180 pernyataan insert!

tember
sumber
12
Berguna untuk beberapa baris. Tidak berguna : Jika tabel memiliki 20000 baris, dan saya hanya ingin 20 sisipan untuk 20 baris.
Kiquenet
2
@Kiquenet - Anda dapat membuat Tampilan yang memilih 20 baris yang Anda inginkan terlebih dahulu, kemudian ikuti langkah-langkah berikut untuk membuat skrip sisipkan berdasarkan Tampilan. Anda kemudian dapat melakukan pencarian massal dan mengganti untuk mengubah nama Tampilan kembali ke nama Tabel apa pun yang perlu Anda masukkan.
tember
@ September Tidak berfungsi pada Tampilan seperti yang Anda katakan, tetapi TIDAK DILAKUKAN dalam Visual Studio: pertama Anda membuat tampilan dengan pilihan yang diperlukan di sql studio, kemudian buka Visual Studio, sambungkan ke sql server dan buat skrip pada tampilan yang dibuat.
Sergii
Terima kasih atas informasinya. Meskipun membuang seluruh tabel itu berlebihan, itu menyelesaikan masalah saya.
paulz
Penolong. Saya telah menulis naskah sepanjang hidup saya.
Jay
38

Metode asli :

Misalnya jika Anda memiliki meja

Users(Id, name)

Kamu bisa melakukan ini:

select 'insert into Table values(Id=' + Id + ', name=' + name + ')' from Users
Andrew Orsich
sumber
Anda dapat melakukannya dengan cara ini, tetapi jika Anda memiliki lebih dari beberapa tabel, itu akan menjadi sedikit pengetikan. Ada sps yang ditulis dan dapat ditemukan di google yang melakukan ini untuk Anda, atau, jika Anda memiliki VS2012, Anda dapat meminta VS melakukannya untuk Anda. Lihat jawaban saya di bawah.
Greg
1
Berguna untuk tabel dengan sedikit bidang. Jika tabel memiliki 50, 60, 100 kolom tidak berguna. Kode SQL generasi yang
Kiquenet
23

1- Penjelasan Script

A) Sintaks untuk memasukkan data ke dalam tabel adalah seperti di bawah ini

Insert into table(col1,col2,col3,col4,col5)    

             -- To achieve this part i    
             --have used below variable
                ------@CSV_COLUMN-------

values(Col1 data in quote, Col2..quote,..Col5..quote)

-- To achieve this part 
-- i.e column data in 
--quote i have used 
--below variable
----@QUOTED_DATA---

C) Untuk mendapatkan data di atas dari tabel yang ada kita harus menulis query select sedemikian rupa sehingga outputnya akan berupa script di atas.

D) Kemudian Akhirnya saya telah Merangkai variabel di atas untuk membuat skrip akhir yang akan menghasilkan skrip sisipan saat dieksekusi

E)

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

F) Dan Akhirnya Jalankan query di atas EXECUTE(TEXT)

G) QUOTENAME()berfungsi untuk membungkus data kolom di dalam kutipan

H) ISNULLdigunakan karena jika ada baris yang memiliki NULL data untuk kolom apa pun, kueri gagal dan mengembalikan itu NULLsebabnya saya harus menghindari ituISNULL

I) Dan menciptakan sp sp_generate_insertscripts untuk hal yang sama

1- Letakkan saja nama tabel yang Anda inginkan insert script

2- Kondisi filter jika Anda menginginkan hasil yang spesifik

----------Final Procedure To generate Script------

CREATE PROCEDURE sp_generate_insertscripts
(
    @TABLE_NAME VARCHAR(MAX),
    @FILTER_CONDITION VARCHAR(MAX)=''
)
AS
BEGIN

SET NOCOUNT ON

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

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_CONDITION

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

EXECUTE (@TEXT)

SET NOCOUNT OFF

END
Param Yadav
sumber
Anda melakukan pekerjaan luar biasa ...
DineshDB
14

Itu mungkin dilakukan melalui Visual Studio SQL Server Object Explorer.

Anda dapat mengklik "Lihat Data" dari menu konteks untuk tabel yang diperlukan, memfilter hasil, dan menyimpan hasil sebagai skrip.

BotanMan
sumber
1
Posting Anda adalah cara yang benar dan termudah menggunakan SQL Server Data Tools di Visual Studio, di sini dan di sini adalah posting yang menjelaskan bagaimana menghasilkan pernyataan penyisipan untuk 1000 baris pertama harapan membantu.
shaijut
8

Menggunakan studio visual, lakukan hal berikut

Buat proyek jenis SQL Server -> Proyek Database SQL Server

buka sql server explorer CTL- \, CTL-S

tambahkan SQL Server dengan mengklik kanan ikon SQL SERVER. Selcet TAMBAHKAN SERVER BARU

arahkan ke bawah ke tabel yang Anda minati

klik kanan -> LIHAT DATA

Klik sel kiri atas untuk menyorot semuanya (ctl-A sepertinya tidak berfungsi)

Klik Kanan -> SCript

Ini luar biasa. Saya telah mencoba semua yang tercantum di atas selama bertahun-tahun. Saya tahu ada alat di luar sana yang akan melakukan ini dan banyak lagi, tidak dapat memikirkan namanya. Tapi itu sangat mahal.

Semoga berhasil. Saya baru saja menemukan ini. Belum mengujinya secara ekstensif dengan bidang teks dll, tetapi sepertinya itu membuat Anda jauh di jalan.

Greg

greg
sumber
1
Ini tidak mengubah hasil tertentu, itu hanya membuat skrip keluar dari tabel.
Eric K
@QuantumDynamix - pertanyaan asli diklarifikasi di bagian bawah oleh 'Bagaimana saya dapat mengubah data dalam satu tabel menjadi skrip.' Di bawah ini adalah contoh pendekatan saya. Ini persis seperti yang diminta pengguna. Faktanya, ini adalah satu-satunya solusi yang saya lihat yang benar-benar menghasilkan skrip sisipan, seperti yang diminta pengguna. Mengapa suara negatifnya? Apa yang dimaksud dengan 'tidak mengonversi hasil tertentu'? SET IDENTITY_INSERT [PMDB]. [BUAttr] ON INSERT INTO [PMDB]. [BUAttr] ([id], [BU], [Name], [Value]) NILAI (1, N'ALASKA ', N'GeoCenter Lat' , N'67.07213 ')
greg
ini bersama dengan membuat tabel temp, melakukannya untuk saya
harishr
4

Buat tabel terpisah menggunakan pernyataan ke Misalnya

Pilih * ke Test_123 dari [dbo]. [Karyawan] di mana Nama seperti '% Test%'

Pergi ke Database Klik Kanan Database Klik Generate Script Pilih tabel Anda Pilih opsi advanace dan pilih Attribute "Data Only" Pilih file "open in new query"

Sql akan menghasilkan skrip untuk Anda

KMR
sumber
3

Anda dapat memilih opsi 'Hasil ke File' di SSMS dan mengekspor hasil pilihan Anda ke file dan membuat perubahan pada file hasil dan terakhir menggunakan BCP - Salinan massal yang dapat Anda masukkan ke dalam tabel 1 di database 2.

Saya pikir untuk penyisipan massal Anda harus mengonversi file .rpt ke file .csv

Semoga bisa membantu.

Pankaj Agarwal
sumber
2

Saya memiliki masalah serupa, tetapi saya harus dapat membuat pernyataan INSERT dari kueri (dengan filter, dll.)

Jadi saya membuat prosedur berikut:

CREATE PROCEDURE dbo.ConvertQueryToInsert (@input NVARCHAR(max), @target NVARCHAR(max)) AS BEGIN

    DECLARE @fields NVARCHAR(max);
    DECLARE @select NVARCHAR(max);

    -- Get the defintion from sys.columns and assemble a string with the fields/transformations for the dynamic query
    SELECT
        @fields = COALESCE(@fields + ', ', '') + '[' + name +']', 
        @select = COALESCE(@select + ', ', '') + ''''''' + ISNULL(CAST([' + name + '] AS NVARCHAR(max)), ''NULL'')+'''''''
    FROM tempdb.sys.columns 
    WHERE [object_id] = OBJECT_ID(N'tempdb..'+@input);

    -- Run the a dynamic query with the fields from @select into a new temp table
    CREATE TABLE #ConvertQueryToInsertTemp (strings nvarchar(max))
    DECLARE @stmt NVARCHAR(max) = 'INSERT INTO #ConvertQueryToInsertTemp SELECT '''+ @select + ''' AS [strings] FROM '+@input
    exec sp_executesql @stmt

    -- Output the final insert statement 
    SELECT 'INSERT INTO ' + @target + ' (' + @fields + ') VALUES (' + REPLACE(strings, '''NULL''', 'NULL') +')' FROM #ConvertQueryToInsertTemp

    -- Clean up temp tables
    DROP TABLE #ConvertQueryToInsertTemp
    SET @stmt = 'DROP TABLE ' + @input
    exec sp_executesql @stmt
END

Anda kemudian dapat menggunakannya dengan menulis output dari kueri Anda ke dalam tabel temp dan menjalankan prosedur:

-- Example table
CREATE TABLE Dummy (Id INT, Comment NVARCHAR(50), TimeStamp DATETIME)
INSERT INTO Dummy VALUES (1 , 'Foo', GetDate()), (2, 'Bar', GetDate()), (3, 'Foo Bar', GetDate())

-- Run query and procedure
SELECT * INTO #TempTableForConvert FROM Dummy WHERE Id < 3
EXEC dbo.ConvertQueryToInsert '#TempTableForConvert', 'dbo.Dummy'

Catatan: Prosedur ini hanya mentransmisikan nilai ke string yang dapat menyebabkan data terlihat sedikit berbeda. Dengan DATETIME misalnya, detik akan hilang.

JollyBrackets
sumber
2

Ini adalah solusi yang lebih serbaguna (yang dapat melakukan lebih dari pertanyaan yang diajukan), dan dapat digunakan di jendela kueri tanpa harus membuat proc baru yang disimpan - berguna dalam database produksi misalnya di mana Anda tidak memiliki akses tulis .

Untuk menggunakan kode tersebut, silahkan modifikasi sesuai dengan baris komentar yang menjelaskan penggunaannya. Anda kemudian dapat menjalankan kueri ini di jendela kueri dan ini akan mencetak pernyataan INSERT yang Anda butuhkan.

SET NOCOUNT ON

-- Set the ID you wish to filter on here
DECLARE @id AS INT = 123

DECLARE @tables TABLE (Name NVARCHAR(128), IdField NVARCHAR(128), IdInsert BIT, Excluded NVARCHAR(128))

-- Add any tables you wish to generate INSERT statements for here. The fields are as thus:
 -- Name: Your table name
 -- IdField: The field on which to filter the dataset
 -- IdInsert: If the primary key field is to be included in the INSERT statement
 -- Excluded: Any fields you do not wish to include in the INSERT statement
INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable1', 'Id', 0, 'Created,Modified')
INSERT INTO @tables (Name, IdField, IdInsert, Excluded) VALUES ('MyTable2', 'Id', 1, 'Created,Modified')

DECLARE @numberTypes TABLE (sysId TINYINT)

-- This will ensure INT and BIT types are not surrounded with quotes in the
-- resultant INSERT statement, but you may need to add more (from sys.types)
INSERT @numberTypes(SysId) VALUES(56),(104)

DECLARE @rows INT = (SELECT COUNT(*) FROM @tables)
DECLARE @cnt INT = 1

DECLARE @results TABLE (Sql NVARCHAR(4000))

WHILE @cnt <= @rows
BEGIN
    DECLARE @tablename AS NVARCHAR(128)
    DECLARE @idField AS NVARCHAR(128)
    DECLARE @idInsert AS BIT
    DECLARE @excluded AS NVARCHAR(128)
    SELECT
        @tablename = Name,
        @idField = IdField,
        @idInsert = IdInsert,
        @excluded = Excluded
    FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS RowId FROM @tables) t WHERE t.RowId = @cnt

    DECLARE @excludedFields TABLE (FieldName NVARCHAR(128))
    DECLARE @xml AS XML = CAST(('<X>' + REPLACE(@excluded, ',', '</X><X>') + '</X>') AS XML)
    INSERT INTO @excludedFields SELECT N.value('.', 'NVARCHAR(128)') FROM @xml.nodes('X') AS T(N)

    DECLARE @setIdentity NVARCHAR(128) = 'SET IDENTITY_INSERT ' + @tablename

    DECLARE @execsql AS NVARCHAR(4000) = 'SELECT ''' + CASE WHEN @idInsert = 1 THEN @setIdentity + ' ON' + CHAR(13) ELSE '' END + 'INSERT INTO ' + @tablename + ' ('
    SELECT @execsql = @execsql +
    STUFF
    (
        (
            SELECT CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN ', ' + name ELSE '' END
            FROM sys.columns
            WHERE object_id = OBJECT_ID('dbo.' + @tablename)
            FOR XML PATH('')
        ), 1, 2, ''
    ) +
    ')' + CHAR(13) + 'VALUES (' +
    STUFF
    (
        (
            SELECT
                CASE WHEN NOT EXISTS(SELECT * FROM @excludedFields WHERE FieldName = name) THEN
                    ''', '' + ISNULL(' +
                    CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ''''''''' + ' END +
                    'CAST(' + name + ' AS VARCHAR)' +
                    CASE WHEN EXISTS(SELECT * FROM @numberTypes WHERE SysId = system_type_id) THEN '' ELSE ' + ''''''''' END +
                    ', ''NULL'') + '
                ELSE ''
                END
            FROM sys.columns
            WHERE object_id = OBJECT_ID('dbo.' + @tablename)
            FOR XML PATH('')
        ), 1, 3, ''
    ) +
    ''')' + CASE WHEN @idInsert = 1 THEN CHAR(13) + @setIdentity + ' OFF' ELSE '' END +
    ''' FROM ' + @tablename + ' WHERE ' + @idField + ' = ' + CAST(@id AS VARCHAR)

    INSERT @results EXEC (@execsql)
    DELETE @excludedFields
    SET @cnt = @cnt + 1
END

DECLARE cur CURSOR FOR SELECT Sql FROM @results
OPEN cur

DECLARE @sql NVARCHAR(4000)
FETCH NEXT FROM cur INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @sql
    FETCH NEXT FROM cur INTO @sql
END

CLOSE cur
DEALLOCATE cur
Neo
sumber
1

Anda dapat Menggunakan Paket Layanan Integrasi Server Sql yang dirancang khusus untuk operasi Impor dan Ekspor .

VS memiliki paket untuk mengembangkan paket-paket ini jika Anda menginstal Sql Server sepenuhnya.

Layanan Integrasi di Business Intelligence Development Studio

Jahan
sumber
1

Saya membuat yang berikut ini procedure:

if object_id('tool.create_insert', 'P') is null
begin
  exec('create procedure tool.create_insert as');
end;
go

alter procedure tool.create_insert(@schema    varchar(200) = 'dbo',
                                   @table     varchar(200),
                                   @where     varchar(max) = null,
                                   @top       int = null,
                                   @insert    varchar(max) output)
as
begin
  declare @insert_fields varchar(max),
          @select        varchar(max),
          @error         varchar(500),
          @query         varchar(max);

  declare @values table(description varchar(max));

  set nocount on;

  -- Get columns
  select @insert_fields = isnull(@insert_fields + ', ', '') + c.name,
         @select = case type_name(c.system_type_id)
                      when 'varchar' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + cast(' + c.name + ' as varchar) + '''''''', ''null'')'
                      when 'datetime' then isnull(@select + ' + '', '' + ', '') + ' isnull('''''''' + convert(varchar, ' + c.name + ', 121) + '''''''', ''null'')'
                      else isnull(@select + ' + '', '' + ', '') + 'isnull(cast(' + c.name + ' as varchar), ''null'')'
                    end
    from sys.columns c with(nolock)
         inner join sys.tables t with(nolock) on t.object_id = c.object_id
         inner join sys.schemas s with(nolock) on s.schema_id = t.schema_id
   where s.name = @schema
     and t.name = @table;

  -- If there's no columns...
  if @insert_fields is null or @select is null
  begin
    set @error = 'There''s no ' + @schema + '.' + @table + ' inside the target database.';
    raiserror(@error, 16, 1);
    return;
  end;

  set @insert_fields = 'insert into ' + @schema + '.' + @table + '(' + @insert_fields + ')';

  if isnull(@where, '') <> '' and charindex('where', ltrim(rtrim(@where))) < 1
  begin
    set @where = 'where ' + @where;
  end
  else
  begin
    set @where = '';
  end;

  set @query = 'select ' + isnull('top(' + cast(@top as varchar) + ')', '') + @select + ' from ' + @schema + '.' + @table + ' with (nolock) ' + @where;

  insert into @values(description)
  exec(@query);

  set @insert = isnull(@insert + char(10), '') + '--' + upper(@schema + '.' + @table);

  select @insert = @insert + char(10) + @insert_fields + char(10) + 'values(' + v.description + ');' + char(10) + 'go' + char(10)
    from @values v
   where isnull(v.description, '') <> '';
end;
go

Maka Anda bisa menggunakannya seperti itu:

declare @insert varchar(max),
        @part   varchar(max),
        @start  int,
        @end    int;

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'customer',
                        @where  = 'id = 1',
                        @insert = @insert output;

-- Print one line to avoid the maximum 8000 characters problem
while len(@insert) > 0
begin
  set @end = charindex(char(10), @insert);

  if @end = 0
  begin
    set @end = len(@insert) + 1;
  end;

  print substring(@insert, @start, @end - 1);
  set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
end;

Outputnya akan seperti itu:

--DBO.CUSTOMER
insert into dbo.customer(id, name, type)
values(1, 'CUSTOMER NAME', 'F');
go

Jika Anda hanya ingin mendapatkan berbagai baris, gunakan @topparameter seperti di bawah ini:

declare @insert varchar(max),
        @part   varchar(max),
        @start  int,
        @end    int;

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'customer',
                        @top    = 100,
                        @insert = @insert output;

-- Print one line to avoid the maximum 8000 characters problem
while len(@insert) > 0
begin
  set @end = charindex(char(10), @insert);

  if @end = 0
  begin
    set @end = len(@insert) + 1;
  end;

  print substring(@insert, @start, @end - 1);
  set @insert = substring(@insert, @end + 1, len(@insert) - @end + 1);
end;
Sorack
sumber
Ini membantu tetapi memotong bidang ini "6C2A94737A456C405FDCF793DFA6E661: BqRc / DpUIe27" menjadi hanya "6C2A94737A456C405FDCF793DFA6E6"
Adam Mendoza
0

Jika Anda menggunakan Oracle (atau mengkonfigurasi aplikasi ke SQL Server), maka Oracle SQL Developer akan melakukannya untuk Anda. pilih 'unload' untuk tabel dan ikuti opsi melalui (hapus centang DDL jika Anda tidak ingin semua tabel membuat barang).

Liam
sumber
1
Ini jelas ditandai sebagai pertanyaan SQL Server ...
BentOnCoding
Ini juga memungkinkan untuk menggunakan pengembang oracle sql dengan sql server. Saya telah mengedit tanggapan saya.
Liam
0

Saya menemukan addon Boost SMSMS ini , yang gratis dan melakukan hal ini antara lain. Anda dapat mengklik kanan pada hasil dan memilih Data skrip sebagai.

DAud
sumber
Saya melihat data grid Script tetapi tidak menghasilkan SQL Insert dari hasil
Kiquenet
0

Anda dapat menggunakan Q2C.SSMSPlugin ini , yang gratis dan open source. Anda dapat mengklik kanan dan memilih "Execute Query To Command ... -> Query To Insert ...". Nikmati)

Sergey Petrov
sumber
Berlaku untuk SSMS 2012?
Kiquenet
-1

Anda dapat menggunakan INSERT INTO SELECTpernyataan, untuk menyisipkan hasil kueri pemilihan ke dalam tabel. http://www.w3schools.com/sql/sql_insert_into_select.asp

Contoh:

INSERT INTO Customers (CustomerName, Country) SELECT SupplierName, Country FROM Suppliers WHERE Country='Germany';
Pelindung satu
sumber
1
Ini tidak ada hubungannya dengan hasil dari pernyataan SELECT yang diubah menjadi pernyataan INSERT. Ini hanyalah pernyataan INSERT biasa.
Niels Lucas
Apakah itu tidak setara secara fungsional?
Pelindung satu