Каков наилучший способ автоматического создания инструкций INSERT для таблицы SQL Server?

мы пишем новое приложение, и во время тестирования нам понадобится куча фиктивных данных. Я добавил Эти данные, используя MS Access для сброса файлов excel в соответствующие таблицы.

время от времени мы хотим "обновить" соответствующие таблицы, что означает их удаление, повторное создание и запуск сохраненного запроса MS Access append.

первая часть (удаление и повторное создание) - это простой SQL-скрипт, но последняя часть заставляет меня съежиться. Мне нужен один сценарий установки у этого есть куча вставок для регенерации фиктивных данных.

теперь у меня есть данные в таблицах. Каков наилучший способ автоматического создания большого списка инструкций INSERT из этого набора данных?

единственный способ, который я могу придумать, это сохранить таблицу на листе excel, а затем написать формулу excel для создания вставки для каждой строки, что, безусловно, не лучший способ.

Я использую среду 2008 Management Studio для подключения к SQL Server 2005 база данных.

19 ответов


Microsoft должна рекламировать эту функциональность SSMS 2008. Функция, которую вы ищете, встроена в Генерировать Скрипт утилиты, но функциональность по умолчанию отключена и должна быть включена при создании таблицы.

Это быстрый прогон, чтобы сгенерировать INSERT операторы для всех данных в таблице, без использования скриптов или надстроек в SQL Management Studio 2008:

  1. щелкните правой кнопкой мыши по базе данных и перейдите к задачи>Сформировать Сценарии.
  2. выберите таблицы (или объекты), для которых вы хотите создать сценарий.
  3. на установить параметры сценариев tab и нажмите на дополнительно.
  4. на общие

мы используем эту хранимую процедуру-она позволяет вам ориентироваться на определенные таблицы и использовать предложения where. Вы можете найти текст здесь.

например, это позволяет сделать следующее:

EXEC sp_generate_inserts 'titles'

Как упоминалось @Mike Ritacco, но обновлено для SSMS 2008 R2

  1. Правой Кнопкой Мыши на имени базы данных
  2. выберите задачи > создать скрипты
  3. В зависимости от ваших настроек страница ввода может показывать или нет
  4. выберите "Выбрать определенные объекты базы данных",
  5. разверните представление дерева и проверьте соответствующие таблицы
  6. Нажмите Кнопку Далее
  7. Дополнительные
  8. В разделе Общие выберите соответствующий опция "типы данных для скрипта"
  9. мастер

затем вы получите все инструкции INSERT для данных прямо из SSMS.

редактировать 2016-10-25 SQL Server 2016 / SSMS 13.0.15900.1

  1. щелкните правой кнопкой мыши по имени базы данных

  2. выберите задачи > создать скрипты

  3. в зависимости от ваших настроек может отображаться страница ввода или не

  4. выберите "Выбрать определенные объекты базы данных",

  5. разверните представление дерева и проверьте соответствующие таблицы

  6. Нажмите Кнопку Далее

  7. Дополнительные

  8. В разделе Общие выберите соответствующий параметр для " типы данных для script'

  9. нажмите OK

  10. выберите, хотите ли Вы выход нового запроса, буфер обмена или файл

  11. Нажмите кнопку Далее дважды

  12. ваш скрипт подготовлен в соответствии с настройками, которые вы выбрали выше

  13. Нажмите Кнопку Готово


можно использовать пакет средств SSMS (доступен для SQL Server 2005 и 2008). Он поставляется с функцией для генерации инструкций insert.

http://www.ssmstoolspack.com/


Это можно сделать с помощью Visual Studio тоже (по крайней мере в версии 2013 года).

в VS 2013 также возможно фильтр список строк, на которых основана инструкция inserts, это что-то невозможное в SSMS, как я знаю.

выполните следующие действия:

  • откройте окно "Обозреватель объектов SQL Server" (меню: /View/Обозреватель объектов SQL Server)
  • открыть / развернуть базу данных и ее таблицы
  • щелкните правой кнопкой мыши по таблице и выберите "Просмотр данных" в контекстном меню
  • это будет отображать данные в основной области
  • необязательный шаг: нажмите на значок фильтра "сортировать и фильтровать набор данных" (четвертый значок слева в строке над результатом) и примените некоторый фильтр к одному или нескольким столбцам
  • нажмите на значки" скрипт "или" скрипт для файла " (значки справа от верхней строки, они выглядят как маленькие листы бумага)

это создаст (условные) инструкции insert для выбранной таблицы в активном окне или файле.


кнопки" фильтр "и" скрипт " Visual Studio 2013:

enter image description here


Я использую SSMS 2008 версии 10.0.5500.0. В этой версии, как часть Мастера создания сценариев, вместо кнопки дополнительно, есть экран ниже. В этом случае я хотел только вставленные данные и никаких операторов create, поэтому мне пришлось изменить два обведенных свойстваScript Options


хранимая процедура Джейн Даллауэй: http://docs.google.com/leaf?id=0B_AkC4ZdTI9tNWVmZWU3NzAtMWY1My00NjgwLWI3ZjQtMTY1NDMxYzBhYzgx&hl=en_GB. Документация представляет собой серию сообщений в блоге: https://www.google.com/search?q=spu_generateinsert&as_sitesearch=http%3A%2F%2Fjane.dallaway.com


первая ссылка на sp_generate_inserts довольно крутая, вот действительно простая версия:

DECLARE @Fields VARCHAR(max); SET @Fields = '[QueueName], [iSort]' -- your fields, keep []
DECLARE @Table  VARCHAR(max); SET @Table  = 'Queues'               -- your table

DECLARE @SQL    VARCHAR(max)
SET @SQL = 'DECLARE @S VARCHAR(MAX)
SELECT @S = ISNULL(@S + '' UNION '', ''INSERT INTO ' + @Table + '(' + @Fields + ')'') + CHAR(13) + CHAR(10) + 
 ''SELECT '' + ' + REPLACE(REPLACE(REPLACE(@Fields, ',', ' + '', '' + '), '[', ''''''''' + CAST('),']',' AS VARCHAR(max)) + ''''''''') +' FROM ' + @Table + '
PRINT @S'

EXEC (@SQL)

в моей системе я получаю этот результат:

INSERT INTO Queues([QueueName], [iSort])
SELECT 'WD: Auto Capture', '10' UNION 
SELECT 'Car/Lar', '11' UNION 
SELECT 'Scan Line', '21' UNION 
SELECT 'OCR', '22' UNION 
SELECT 'Dynamic Template', '23' UNION 
SELECT 'Fix MICR', '41' UNION 
SELECT 'Fix MICR (Supervisor)', '42' UNION 
SELECT 'Foreign MICR', '43' UNION 
...

мой вклад в проблему, генератор сценариев вставки Powershell, который позволяет создавать сценарии нескольких таблиц без использования громоздкого графического интерфейса SSMS. Отлично подходит для быстрого сохранения данных "семян" в систему управления версиями.

  1. сохранить ниже скрипт как "именем.пс1".
  2. Сделайте ваши собственные изменения к областям под "подгоняйте меня".
  3. вы можете добавить список таблиц в скрипт в любом порядке.
  4. скрипт можно открыть в Powershell ISE и нажмите кнопку воспроизведения или просто выполните сценарий в командной строке Powershell.

по умолчанию сгенерированный скрипт вставки будет " SeedData.sql " в той же папке, что и скрипт.

вам понадобятся установленные сборки объектов управления SQL Server, которые должны быть там, если у вас установлена SSMS.

Add-Type -AssemblyName ("Microsoft.SqlServer.Smo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")
Add-Type -AssemblyName ("Microsoft.SqlServer.ConnectionInfo, Version=12.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91")



#CUSTOMIZE ME
$outputFile = ".\SeedData.sql"
$connectionString = "Data Source=.;Initial Catalog=mydb;Integrated Security=True;"



$sqlConnection = new-object System.Data.SqlClient.SqlConnection($connectionString)
$conn = new-object Microsoft.SqlServer.Management.Common.ServerConnection($sqlConnection)
$srv = new-object Microsoft.SqlServer.Management.Smo.Server($conn)
$db = $srv.Databases[$srv.ConnectionContext.DatabaseName]
$scr = New-Object Microsoft.SqlServer.Management.Smo.Scripter $srv
$scr.Options.FileName = $outputFile
$scr.Options.AppendToFile = $false
$scr.Options.ScriptSchema = $false
$scr.Options.ScriptData = $true
$scr.Options.NoCommandTerminator = $true

$tables = New-Object Microsoft.SqlServer.Management.Smo.UrnCollection



#CUSTOMIZE ME
$tables.Add($db.Tables["Category"].Urn)
$tables.Add($db.Tables["Product"].Urn)
$tables.Add($db.Tables["Vendor"].Urn)



[void]$scr.EnumScript($tables)

$sqlConnection.Close()

Если вам нужен программный доступ, вы можете использовать generateinsert хранимой процедуры с открытым исходным кодом.

вставить оператор(ы) генератор

Так же, как простой и быстрый пример, для создания инструкций INSERT для таблицы AdventureWorks.Person.AddressType выполните следующие инструкции:

USE [AdventureWorks];
GO
EXECUTE dbo.GenerateInsert @ObjectName = N'Person.AddressType';

это создаст следующий скрипт:

SET NOCOUNT ON
SET IDENTITY_INSERT Person.AddressType ON
INSERT INTO Person.AddressType
([AddressTypeID],[Name],[rowguid],[ModifiedDate])
VALUES
 (1,N'Billing','B84F78B1-4EFE-4A0E-8CB7-70E9F112F886',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(2,N'Home','41BC2FF6-F0FC-475F-8EB9-CEC0805AA0F2',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(3,N'Main Office','8EEEC28C-07A2-4FB9-AD0A-42D4A0BBC575',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(4,N'Primary','24CB3088-4345-47C4-86C5-17B535133D1E',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(5,N'Shipping','B29DA3F8-19A3-47DA-9DAA-15C84F4A83A5',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
,(6,N'Archive','A67F238A-5BA2-444B-966C-0467ED9C427F',CONVERT(datetime,'2002-06-01 00:00:00.000',121))
SET IDENTITY_INSERT Person.AddressType OFF

возможно, вы можете попробовать мастер публикации SQL Server http://www.microsoft.com/downloads/details.aspx?FamilyId=56E5B1C5-BF17-42E0-A410-371A838E570A&displaylang=en

Он имеет мастер, который поможет вам скрипт вставки операторов.


Не используйте вставки, используйте BCP


Я использовал этот скрипт который я разместил в своем блоге (как создать процедуры инструкции Insert на sql server).

до сих пор работал для меня, хотя они могут быть ошибки я еще не обнаружен .


GenerateData удивительный инструмент для этого. Это также очень легко сделать настройки к нему, потому что исходный код доступен для вас. Несколько приятных особенностей:

  • Генератор имен для имен и мест народов
  • возможность сохранения профиля генерации (после его загрузки и настройки локально)
  • возможность настройки и управления генерацией с помощью скриптов
  • много различных выходов (CSV, Javascript, JSON и т. д.) для данные (в случае, если вам нужно протестировать набор в разных средах и хотите пропустить доступ к базе данных)
  • свободный. Но подумайте о пожертвовании, если вы найдете программное обеспечение полезным :).

GUI


Я использую SQLite для этого. Я нахожу это очень, очень полезно для создания баз данных автоматизированных тестов.

sqlite3 foo.sqlite .dump > foo_as_a_bunch_of_inserts.sql


У вас уже есть данные в производственной базе данных? Если это так, вы можете настроить период обновления данных через ДЦ. Мы делаем наши еженедельно по выходным, и очень приятно иметь чистые, реальные данные каждую неделю для нашего тестирования.

Если у вас еще нет производства, то вы должны создать базу данных, которую они хотят, чтобы вы хотели (свежий). Затем дублируйте эту базу данных и используйте ее в качестве тестовой среды. Когда вы хотите чистую версию, просто дублируйте ваш чистый снова и Боб твой дядя.


Не уверен, если я правильно понял ваш вопрос.

Если у вас есть данные в MS-Access, которые вы хотите переместить на SQL Server - вы можете использовать DTS.
И, я думаю, вы можете использовать SQL profiler, чтобы увидеть все инструкции INSERT, я полагаю.


Я также исследовал много об этом, но я не мог получить конкретное решение для этого. В настоящее время я придерживаюсь подхода, который копирует содержимое в excel из SQL Server Managment studio, а затем импортирует данные в Oracle-TOAD, а затем генерирует инструкции insert


Почему бы просто не сделать резервную копию данных перед работой с ним, а затем восстановить, когда вы хотите, чтобы он был обновлен?

Если вы должны генерировать вставки попробуйте:http://vyaskn.tripod.com/code.htm#inserts