Вставить скрипт для определенного набора строк в SQL

Я использую SQL Server 2008. Я использую сценарий своих данных из таблицы SQL, используя параметр «Задачи -> Генерировать скрипты».

Вот моя проблема:

Допустим, у меня 21 000 записей в таблице Employee . Когда я беру скрипт этой таблицы, он принимает скрипт вставки для всех 21000 записей. Каково решение, если я хочу взять только скрипт из 18000 записей из таблицы?

Есть ли решение с использованием SQL-запроса или из мастера задач?

Заранее спасибо…

Создайте новый вид, в котором вы выбираете нужные строки из таблицы Employee, например SELECT TOP 21000...

Затем просто создайте сценарий «Просмотр» вместо «Таблица».

В случае, если представления не являются для вас вариантом, я написал следующий код, основанный на ответе Аарона Бертранда, который даст инструкцию insert для одной записи в db.

 CREATE PROCEDURE dbo.GenerateSingleInsert @table NVARCHAR(511), -- expects schema.table notation @pk_column SYSNAME, -- column that is primary key @pk_value NVARCHAR(10) -- change data type accordingly AS BEGIN SET NOCOUNT ON; DECLARE @cols NVARCHAR(MAX), @vals NVARCHAR(MAX), @valOut NVARCHAR(MAX), @valSQL NVARCHAR(MAX); SELECT @cols = N'', @vals = N''; SELECT @cols = @cols + ',' + QUOTENAME(name), @vals = @vals + ' + '','' + ' + 'ISNULL('+REPLICATE(CHAR(39),4)+'+RTRIM(' + CASE WHEN system_type_id IN (40,41,42,43,58,61) -- dateteime and time stamp type THEN 'CONVERT(CHAR(8), ' + QUOTENAME(name) + ', 112) + '' ''+ CONVERT(CHAR(14), ' + QUOTENAME(name) + ', 14)' WHEN system_type_id IN (35) -- text type THEN 'REPLACE(CAST(' + QUOTENAME(name) + 'as nvarchar(MAX)),'+REPLICATE(CHAR(39),4)+','+REPLICATE(CHAR(39),6)+')' ELSE 'REPLACE(' + QUOTENAME(name) + ','+REPLICATE(CHAR(39),4)+','+REPLICATE(CHAR(39),6)+')' END + ')+' + REPLICATE(CHAR(39),4) + ',''null'') + ' FROM sys.columns WHERE [object_id] = OBJECT_ID(@table) AND system_type_id <> 189 -- can't insert rowversion AND is_computed = 0; -- can't insert computed columns SELECT @cols = STUFF(@cols, 1, 1, ''), @vals = REPLICATE(CHAR(39),2) + STUFF(@vals, 1, 6, '') + REPLICATE(CHAR(39),2) ; SELECT @valSQL = N'SELECT @valOut = ' + @vals + ' FROM ' + @table + ' WHERE ' + QUOTENAME(@pk_column) + ' = ''' + RTRIM(@pk_value) + ''';'; EXEC sp_executesql @valSQL, N'@valOut NVARCHAR(MAX) OUTPUT', @valOut OUTPUT; SELECT SQL = 'INSERT ' + @table + '(' + @cols + ') SELECT ' + @valOut; END 

Я взял вышеуказанный код и завернул его в следующий процесс, который будет использовать предложение where, которое вы ему даете, чтобы выбрать, какие инструкции вставки создавать

 CREATE PROCEDURE dbo.GenerateInserts @table NVARCHAR(511), -- expects schema.table notation @pk_column SYSNAME, -- column that is primary key @whereClause NVARCHAR(500) -- the where clause used to parse down the data AS BEGIN declare @temp TABLE ( keyValue nvarchar(10), Pos int ); declare @result TABLE ( insertString nvarchar(MAX) ); declare @query NVARCHAR(MAX) set @query = 'with qry as ( SELECT ' + @pk_column + ' as KeyValue, ROW_NUMBER() over(ORDER BY ' + @pk_column + ') Pos from ' + @table + ' ' + @whereClause + ' ) select * from qry' insert into @temp exec sp_sqlexec @query Declare @i int, @key nvarchar(10) select @i = count(*) from @temp WHILE @i > 0 BEGIN select @key = KeyValue from @temp where Pos = @i insert into @result exec [dbo].[GenerateSingleInsert] @table, @pk_column, @key set @i = @i - 1 END select insertString from @result END 

Вызов может выглядеть следующим образом. Вы передаете имя таблицы, первичный ключ таблицы и предложение where, и вы должны заключить свои инструкции вставки.

 set @whereClause = 'where PrettyColorsId > 1000 and PrettyColorsID < 5000' exec [dbo].GenerateInserts 'dbo.PrettyColors', 'PrettyColorsID', @whereClause set @whereClause = 'where Color in (' + @SomeValues + ')' exec [dbo].GenerateInserts 'dbo.PrettyColors', 'PrettyColorsID', @whereClause 
  • ошибка при использовании подзапроса в операторе вставки
  • Сравнение с вставкой в ​​запрос лучше
  • не может вставлять данные в базу данных
  • Вставьте файл клиента в столбец базы данных сервера
  • Фактический вставленный идентификатор строки
  • SQL Server: вставить идентификатор
  • SQL Server: вставьте строку в другую таблицу для каждой строки в другой таблице, которая соответствует критерию
  • Ввод строки SQL-запроса
  • Выберите MAX (поле) +1 FROM ... Проблемы параллелизма
  • Как INSERT INTO в таблице 300 раз в цикле в SQL?
  • SQL быстрые INSERT без UPDATE
  • Interesting Posts

    Драйвер JTDS, не работающий для Sql Server 2008R2 и Denali Native SSPI, не загружен. Проверить свойство системы java.library.path

    SQL SUM Те же столбцы

    SQL DISTINCT для 2 столбцов WHERE 3rd column = value

    Моделирование «много-к-одному» с ограничениями?

    Как передать имя поля в качестве параметра в хранимую процедуру

    Условное где предложение?

    Выберите, где id не в (…) имеет лимит? – НЕ В ВС НЕ СУЩЕСТВУЕТ

    Обтекание матрицы отчетов SQL

    Как создать запрос, который получает только данные, которые были обновлены в таблице

    Grid (View) с поисковой страницей, сортировкой и поиском: как использовать Ressource Provider

    исключить все строки для идентификатора, если 1 строка соответствует условию

    Преобразование хранимой процедуры PL / SQL в Oracle в Transact-SQL для SQL Server

    Как избежать символа подчеркивания в аргументе шаблона PATINDEX?

    SQL SERVER – Ранг / Число строк в месяцах

    InvalidOperationException, когда я пытаюсь получить пароль из базы данных, «Недопустимая попытка чтения, когда нет данных».

    Давайте будем гением компьютера.