Conversion des résultats de sélection en script d'insertion - SQL Server [fermé]


107

J'ai SQL Server 2008, SQL Server Management Studio.

J'ai besoin de sélectionner des données Table1dans database1. Ensuite, je dois modifier certaines valeurs dans les résultats et insert values into Table1dans database2.

Ou laissez-moi le dire autrement.

Comment puis-je convertir les données d'une table en fichiers insert script.


Les bases de données sont-elles sur le même serveur? Si c'est le cas, vous pouvez insérer de l'un dans l'autre. Insérer dans database2.dbo.myTable sélectionner les données de database1.dbo.anOtherTable
u07ch

Oui, les deux bases de données sont sur le même serveur. Mais j'ai besoin d'un script. Je vais donner ces scripts à notre gars de la base de données.
Captain Comic

Cela aiderait à clarifier la question. Une approche fonctionnera-t-elle ou avez-vous besoin d'un script d'insertion que vous pouvez transmettre à votre dba?
greg

Réponses:


31

SSMS Toolpack (qui est GRATUIT comme dans la bière) a une variété de fonctionnalités intéressantes - y compris la génération d'instructions INSERT à partir de tables.

Mise à jour: pour SQL Server Management Studio 2012 (et plus récent), SSMS Toolpack n'est plus gratuit, mais nécessite des frais de licence modestes.


+1 @marc_s J'ai fait beaucoup de travail en générant de tels scripts d'insertion avec des scripts de générateur T-SQL et maintenant vous me dites qu'il existe un outil.
bernd_k

Soyez prudent lorsque les tables stockent des données financières . Ces types de données peuvent stocker plus de décimales que celles normalement affichées ou dans les scripts générés par SSMS Toolpack
bernd_k

13
Ce n'est plus gratuit. ssmstoolspack.com/Licensing
greg

@Greg: merci de l'avoir signalé. Remarque: cette licence s'applique uniquement à SQL Server Management Studio 2012 et plus récent - pour les versions antérieures, le pack d'outils est toujours gratuit.
marc_s

4
Alternative à SSMS Toolpack ?
Kiquenet

156

Voici une autre méthode, qui peut être plus simple que d'installer des plugins ou des outils externes dans certaines situations:

  • Fait une select [whatever you need]INTO temp.table_namefrom [... etc ...] .
  • Faites un clic droit sur la base de données dans l'Explorateur d'objets => Tâches => Générer des scripts
  • Sélectionner temp.table_name dans l'écran "Choisir les objets", cliquez sur Suivant.
  • Dans l'écran "Spécifiez comment les scripts doivent être enregistrés":
    • Cliquez sur Avancé, recherchez la propriété "Types de données à script", sélectionnez "Données uniquement", fermez les propriétés avancées.
    • Sélectionnez "Enregistrer dans une nouvelle fenêtre de requête" (sauf si vous avez des milliers d'enregistrements).
  • Cliquez sur Suivant, attendez la fin du travail, observez les INSERTinstructions résultantes apparaître dans une nouvelle fenêtre de requête.
  • Utilisez Rechercher et remplacer pour tout changer [temp.table_name]en [your_table_name].
  • drop table [temp.table_name].

L'utilisation de INTO temp.table1 génère l'erreur suivante: Le nom de schéma spécifié «temp» n'existe pas ou vous n'êtes pas autorisé à l'utiliser. J'utilise SQL 2012.
Marquez

3
tempici fait référence à tout schéma auquel vous avez accès. Vous pouvez soit en créer un ( create schema temp) puis le supprimer lorsque vous avez terminé, soit (mieux) simplement utiliser le schéma dans lequel vous travaillez actuellement.
KT.

1
Merci pour cela, je savais qu'il devait y avoir un moyen! En passant, vous pouvez ignorer la création de la table temporaire si vous avez juste besoin de toutes les données de la table que vous souhaitez script.
FAB du

J'ai dû l'utiliser pour importer des données dans une base de données Azure. Importez-le dans une base de données non Azure, puis extrayez-le sous forme d'insertions SQL.
m12lrpv

2
Je suis toujours étonné que SSMS n'ait pas ajouté cette capacité `` afficher la sortie en tant que script d'insertion '' sur les ensembles de résultats ... mais l'approche ci-dessus fonctionne, bien qu'elle crée des commandes d'insertion individuelles au lieu de faire une insertion en bloc appropriée (par exemple, 1000 éléments par insertion ) comme il se doit. Cela peut prendre une éternité pour fonctionner sur de très grands ensembles de résultats
Traderhut Games

60

Dans SSMS:

  • Faites un clic droit sur la base de données> Tâches> Générer des scripts

  • Prochain

  • Sélectionnez "Sélectionner des objets de base de données spécifiques" et cochez la table que vous voulez scriptée, Suivant

  • Cliquez Advanced >dans la liste des options, faites défiler vers le bas et recherchez les "Types de données à script" et modifiez-les en "Données uniquement"> OK

  • Sélectionnez "Enregistrer dans une nouvelle fenêtre de requête"> Suivant> Suivant> Terminer

Les 180 lignes sont maintenant écrites comme 180 instructions d'insertion!


12
Utile pour quelques rangées. Pas utile : si une table contient 20000 lignes et que je ne veux que 20 insertions pour 20 lignes.
Kiquenet

2
@Kiquenet - Vous pouvez d'abord créer une vue qui sélectionne les 20 lignes souhaitées, puis suivez ces étapes pour créer les scripts d'insertion basés sur la vue. Vous pouvez ensuite effectuer une recherche et un remplacement en masse pour remplacer le nom de la vue par le nom de la table dans lequel vous devez l'insérer.
tembre

@tember Cela ne fonctionne pas sur View comme vous le dites, mais cela fonctionne dans Visual Studio: commencez par créer une vue avec la sélection requise dans SQL Studio, puis ouvrez Visual Studio, connectez-vous au serveur SQL et générez un script sur cette vue créée.
Sergii

Merci pour cette information. Bien que vider la table entière soit exagéré, cela a résolu mon problème.
paulz

Sauveur de vie. J'ai écrit des scripts toute ma vie.
Jay le

38

Méthode native :

par exemple si vous avez une table

Users(Id, name)

Tu peux le faire:

select 'insert into Table values(Id=' + Id + ', name=' + name + ')' from Users

Vous pouvez le faire de cette façon, mais si vous avez plus de quelques tables, cela devient un peu de frappe. Il existe des sps écrits et trouvables sur google qui le font pour vous, ou, si vous avez VS2012, vous pouvez demander à VS de le faire pour vous. Voir ma réponse ci-dessous.
greg

1
Utile pour les tables avec peu de champs. Si une table a 50, 60, 100 colonnes ne sont pas utiles. Code SQL de
Kiquenet

23

1- Explication des scripts

A) La syntaxe pour insérer des données dans le tableau est la suivante

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) Pour obtenir les données ci-dessus à partir de la table existante, nous devons écrire la requête de sélection de manière à ce que la sortie soit sous la forme de scripts ci-dessus

D) Enfin, j'ai concaténé la variable ci-dessus pour créer un script final qui générera un script d'insertion lors de l'exécution

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) Et enfin exécuté la requête ci-dessus EXECUTE(TEXT)

G)QUOTENAME() fonction est utilisée pour envelopper les données de la colonne dans la citation

H) ISNULLest utilisé parce que si une ligne contient des NULL données pour une colonne, la requête échoue et retourne NULLc'est pourquoi pour éviter que j'ai utiliséISNULL

I) Et a créé le sp sp_generate_insertscripts pour le même

1- Mettez simplement le nom de la table pour laquelle vous voulez insert script

2- Condition de filtrage si vous voulez des résultats spécifiques

----------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

Vous avez fait un travail incroyable ...
DineshDB

14

Il est possible de le faire via Visual Studio Explorateur d'objets SQL Server.

Vous pouvez cliquer sur "Afficher les données" dans le menu contextuel pour la table nécessaire, filtrer les résultats et enregistrer le résultat sous forme de script.


1
Votre message est correct et le plus simple à l' aide SQL Server Data Tools dans Visual Studio, ici et ici est post qui explique comment générer insert déclaration pour 1000 premiers rangs espoir aide.
shaijut

8

À l'aide de Visual Studio, procédez comme suit

Créer un projet de type SQL Server -> Projet de base de données SQL Server

ouvrez l'explorateur de serveur sql CTL- \, CTL-S

ajoutez un serveur SQL en cliquant avec le bouton droit de la souris sur l'icône SQL SERVER. Selcet AJOUTER UN NOUVEAU SERVEUR

naviguez jusqu'au tableau qui vous intéresse

clic droit -> VOIR LES DONNÉES

Cliquez sur la cellule en haut à gauche pour tout mettre en surbrillance (ctl-A ne semble pas fonctionner)

Clic droit -> SCript

C'est fabuleux. J'ai essayé tout ce qui précède au fil des ans. Je sais qu'il existe un outil qui fera cela et bien plus encore, je ne peux pas penser à son nom. Mais c'est très cher.

Bonne chance. Je viens de comprendre cela. Je ne l'ai pas testé de manière approfondie avec des champs de texte, etc., mais il semble que cela vous amène un long chemin sur la route.

Greg


1
Cela ne convertit pas les résultats sélectionnés, il script simplement hors de la table.
Eric K

@QuantumDynamix - la question d'origine est clarifiée en bas par «Comment puis-je convertir les données d'une table en un script». Voici un exemple de mon approche. C'est exactement ce que l'utilisateur a demandé. En fait, c'est la seule solution que je vois qui produit réellement un script d'insertions, comme le demande l'utilisateur. Pourquoi le vote négatif? Que signifie «ne pas convertir les résultats sélectionnés»? SET IDENTITY_INSERT [PMDB]. [BUAttr] ON INSERT INTO [PMDB]. [BUAttr] ([id], [BU], [Name], [Value]) VALUES (1, N'ALASKA ', N'GeoCenter Lat' , N'67.07213 ')
greg

ceci avec la création des tables temporaires, l'a fait pour moi
harishr

4

Créer une table séparée à l'aide de l'instruction into Par exemple

Sélectionnez * dans Test_123 à partir de [dbo]. [Employee] où Nom comme '% Test%'

Aller à la base de données Cliquez avec le bouton droit sur la base de données Cliquez sur Générer un script Sélectionnez votre table Sélectionnez l'option advanace et sélectionnez l'attribut "Données uniquement" Sélectionnez le fichier "ouvrir dans une nouvelle requête"

Sql générera un script pour vous


3

Vous pouvez choisir l'option `` Résultat dans un fichier '' dans SSMS et exporter votre résultat sélectionné dans un fichier et apporter vos modifications dans le fichier de résultats et enfin en utilisant BCP - Copie en bloc que vous pouvez insérer dans le tableau 1 de la base de données 2.

Je pense que pour l'insertion en masse, vous devez convertir le fichier .rpt en fichier .csv

J'espère que cela aidera.


2

J'ai eu un problème similaire, mais je devais pouvoir créer une instruction INSERT à partir d'une requête (avec des filtres, etc.)

J'ai donc créé la procédure suivante:

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

Vous pouvez ensuite l'utiliser en écrivant la sortie de votre requête dans une table temporaire et en exécutant la procédure:

-- 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'

Remarque: Cette procédure ne convertit les valeurs qu'en une chaîne, ce qui peut donner aux données un aspect légèrement différent. Avec DATETIME par exemple, les secondes seront perdues.


2

C'est une solution plus polyvalente (qui peut faire un peu plus que ce que demande la question), et peut être utilisée dans une fenêtre de requête sans avoir à créer un nouveau processus stocké - utile dans les bases de données de production par exemple où vous n'avez pas d'accès en écriture .

Pour utiliser le code, veuillez le modifier en fonction des commentaires en ligne qui expliquent son utilisation. Vous pouvez ensuite simplement exécuter cette requête dans une fenêtre de requête et elle imprimera les instructions INSERT dont vous avez besoin.

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



1

J'ai créé ce qui suit 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

Ensuite, vous pouvez l'utiliser de cette façon:

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;

La sortie serait quelque chose comme ça:

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

Si vous souhaitez simplement obtenir une plage de lignes, utilisez le @topparamètre ci-dessous:

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;

Cela aide, mais il a tronqué ce champ "6C2A94737A456C405FDCF793DFA6E661: BqRc / DpUIe27" à juste "6C2A94737A456C405FDCF793DFA6E6"
Adam Mendoza

0

Si vous utilisez Oracle (ou configurez l'application sur SQL Server), Oracle SQL Developer le fait pour vous. choisissez «décharger» pour une table et suivez les options (décochez DDL si vous ne voulez pas que toute la table crée des trucs).


1
Ceci est clairement marqué comme une question SQL Server ...
BentOnCoding

Il est également possible d'utiliser Oracle SQL Developer avec un serveur SQL. J'ai édité ma réponse.
Liam

0

J'ai trouvé cet addon SMSMS Boost , qui est gratuit et fait exactement cela entre autres. Vous pouvez faire un clic droit sur les résultats et sélectionner les données de script comme.



0

Vous pouvez utiliser ce Q2C.SSMSPlugin , qui est gratuit et open source. Vous pouvez cliquer avec le bouton droit de la souris et sélectionner "Exécuter la requête à la commande ... -> Requête à insérer ...". Prendre plaisir)


Valable pour SSMS 2012?
Kiquenet le

-1

Vous pouvez utiliser une INSERT INTO SELECTinstruction pour insérer les résultats d'une requête de sélection dans une table. http://www.w3schools.com/sql/sql_insert_into_select.asp

Exemple:

INSERT INTO Customers (CustomerName, Country) SELECT SupplierName, Country FROM Suppliers WHERE Country='Germany';

1
Cela n'a rien à voir avec un résultat d'une instruction SELECT convertissant en instructions INSERT. Il s'agit simplement d'une instruction INSERT.
Niels Lucas le

N'est-ce pas fonctionnellement équivalent?
Protector un
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.