Подтвердить что ты не робот

Создать вставку script для выбранных записей?

У меня есть таблица со следующими данными:

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

Я хочу создать Insert script для переноса записей, Fk_CompanyId которых равен 1.

Существует опция insert script для генерации script для всех записей, но я хочу, чтобы некоторые записи были перенесены для переноса в другую базу данных.

4b9b3361

Ответ 1

Если вы используете SQL Management Studio, вы можете щелкнуть правой кнопкой мыши по имени своей базы данных и выбрать Задачи > Импорт/экспорт данных и последующие действия мастера.
один из шагов называется "Укажите копию таблицы или запрос", где есть возможность написать запрос, чтобы указать данные для передачи, поэтому вы можете просто указать следующий запрос:

select * from [Table] where Fk_CompanyId = 1

Ответ 2

SELECT 'INSERT SomeOtherDB.dbo.table(column1,column2,etc.)
  SELECT ' + CONVERT(VARCHAR(12), Pk_Id) + ','
       + '''' + REPLACE(ProductName, '''', '''''') + ''','
       + CONVERT(VARCHAR(12), Fk_CompanyId) + ','
       + CONVERT(VARCHAR(12), Price) + ';'
FROM dbo.unspecified_table_name
WHERE Fk_CompanyId = 1;

Ответ 3

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 @[email protected]

SELECT @[email protected]_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 '[email protected]_NAME+'('[email protected]_COLUMN+')VALUES('''+'+'+SUBSTRING(@QUOTED_DATA,1,LEN(@QUOTED_DATA)-5)+'+'+''')'''+' Insert_Scripts FROM '[email protected]_NAME + @FILTER

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

EXECUTE (@TEXT)

SET NOCOUNT OFF

END

Ответ 4

Вы можете создать представление с вашими критериями и затем экспортировать представление?

Ответ 5

Если возможно, используйте Visual Studio. Инструменты данных Microsoft SQL Server (SSDT) предоставляют встроенную функциональность для этого начиная с выпуска в марте 2014 года:

  1. Откройте Visual Studio
  2. Откройте "Вид" → "Обозреватель объектов SQL Server"
  3. Добавить соединение на ваш сервер
  4. Разверните соответствующую базу данных
  5. Разверните папку "Таблицы"
  6. Щелкните правой кнопкой мыши по соответствующей таблице
  7. Выберите "Просмотр данных" из контекстного меню
  8. В новом окне для просмотра данных используйте функцию "Сортировка и набор данных фильтра" на панели инструментов, чтобы применить фильтр. Обратите внимание, что эта функциональность ограничена, и вы не можете писать SQL-запросы explizit.
  9. После того, как вы применили свой фильтр и видите только те данные, которые вам нужны, нажмите "Сценарий" или "Сценарий в файл" на панели инструментов.
  10. Вуаля - Здесь у вас есть скрипт вставки для ваших отфильтрованных данных

Примечание: будьте осторожны, окно "Просмотр данных" похоже на SSMS "Edit Top 200 Rows" - вы можете редактировать данные сразу

(Тестирование в Visual Studio 2015 с инструментами данных Microsoft SQL Server (SSDT) версии 14.0.60812.0 и Microsoft SQL Server 2012)

Ответ 6

В SSMS выполните ваш SQL-запрос. В окне результатов выберите все ячейки и скопируйте значения. Перейти к ниже веб-сайта и там вы можете вставлять скопированные данные и генерировать SQL-скрипты. Вы также можете сохранить результаты запроса из SSMS в виде файла CSV и импортировать файл csv в этот веб-сайт.

http://www.convertcsv.com/csv-to-sql.htm

Ответ 7

Если вы используете Oracle SQL Developer, это будет

select /*insert*/ * from TABLE_NAME where COLUMN_NAME = 'VALUE';

Запустите это как script

Ответ 8

В итоге я сделал это за 2 шага. Выбрали записи, которые я хочу в новую таблицу в базе данных, а затем сгенерировали только данные SQL script в SSMS. Я нашел и заменил на сгенерированном script и удалил таблицу.

Ответ 9

  • CREATE DATABASE Test
  • выберите INTO Test.dbo. [Таблица] из [Таблица], где Fk_CompanyId = 1
  • Щелкните правой кнопкой мыши на Test db и сгенерируйте script

Ответ 10

Я создал следующий 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 no columns...
  if @insert_fields is null or @select is null
  begin
    set @error = 'There' 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

Затем вы можете использовать его таким образом:

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

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'myTable',
                        @where  = 'Fk_CompanyId = 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;

Результат будет примерно таким:

--DBO.MYTABLE
insert into dbo.myTable(Pk_Id, ProductName, Fk_CompanyId, Price)
values(1, 'AMX', 1, 10.00);
go

insert into dbo.myTable(Pk_Id, ProductName, Fk_CompanyId, Price)
values(2, 'ABC', 1, 11.00);
go

insert into dbo.myTable(Pk_Id, ProductName, Fk_CompanyId, Price)
values(3, 'APEX', 1, 12.00);
go

insert into dbo.myTable(Pk_Id, ProductName, Fk_CompanyId, Price)
values(4, 'AMX', 1, 10.00);
go

insert into dbo.myTable(Pk_Id, ProductName, Fk_CompanyId, Price)
values(5, 'ABC', 1, 11.00);
go

insert into dbo.myTable(Pk_Id, ProductName, Fk_CompanyId, Price)
values(6, 'APEX', 1, 12.00);
go

insert into dbo.myTable(Pk_Id, ProductName, Fk_CompanyId, Price)
values(7, 'AMX', 2, 10.00);
go

insert into dbo.myTable(Pk_Id, ProductName, Fk_CompanyId, Price)
values(8, 'ABC', 2, 11.00);
go

insert into dbo.myTable(Pk_Id, ProductName, Fk_CompanyId, Price)
values(9, 'APEX', 2, 12.00);
go

Если вы просто хотите получить ряд строк, используйте параметр @top, как показано ниже:

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

set @start = 1;

exec tool.create_insert @schema = 'dbo',
                        @table = 'myTable',
                        @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;