Каков наилучший способ автоматического создания инструкций INSERT для таблицы SQL Server?
мы пишем новое приложение, и во время тестирования нам понадобится куча фиктивных данных. Я добавил Эти данные, используя MS Access для сброса файлов excel в соответствующие таблицы.
время от времени мы хотим "обновить" соответствующие таблицы, что означает удаление их всех, повторное их создание и запуск сохраненного запроса MS Access append.
первая часть (dropping & re-creating) - это простой SQL-скрипт, но последняя часть заставляет меня съежиться. Я хочу один сценарий установки это имеет кучу вставок для регенерации фиктивных данных.
теперь у меня есть данные в таблицах. Каков наилучший способ автоматического создания большого списка инструкций INSERT из этого набора данных?
единственный способ, который я могу придумать, это сохранить таблицу на листе excel, а затем написать формулу excel для создания вставки для каждой строки, что, безусловно, не лучший способ.
Я использую 2008 Management Studio для подключения к SQL Server 2005 база данных.
19 ответов:
Microsoft должна рекламировать эту функциональность SSMS 2008. Функция, которую вы ищете, встроена в Генерировать Скрипт утилиты, но функциональность по умолчанию отключена и должна быть включена при создании таблицы.
Это быстрый прогон для создания
INSERTинструкции для всех данных в таблице, не используя скрипты или надстройки для SQL Management Studio 2008:
- щелкните правой кнопкой мыши на базе данных и перейти к задачи>Сформировать Сценарии.
- выберите таблицы (или объекты), для которых вы хотите создать сценарий.
- на установить параметры сценариев вкладка и нажмите на кнопку Advanced.
- на общие
мы используем эту хранимую процедуру - она позволяет вам ориентироваться на определенные таблицы и использовать предложения where. Вы можете найти текст здесь.
например, это позволяет сделать следующее:
EXEC sp_generate_inserts 'titles'
Как упоминалось @Mike Ritacco, но обновлено для SSMS 2008 R2
- Правой Кнопкой Мыши на имени базы данных
- выберите задачи > создать скрипты
- В зависимости от ваших настроек на странице ввода может отображаться или нет
- выбрать выбрать конкретные объекты базы данных',
- разверните представление дерева и проверьте соответствующие таблицы
- Нажмите Кнопку Далее
- Дополнительные
- В разделе Общие выберите соответствующий опция для типов данных для сценария'
- мастер
затем вы получите все инструкции INSERT для данных прямо из SSMS.
редактировать 2016-10-25 SQL Server 2016 / SSMS 13.0.15900.1
Правой Кнопкой Мыши на имени базы данных
выберите задачи > создать скрипты
в зависимости от настроек на странице ввода может отображаться или не
выбрать выбрать конкретные объекты базы данных',
разверните представление дерева и проверьте соответствующие таблицы
Нажмите Кнопку Далее
Нажмите Кнопку Дополнительно
В разделе Общие выберите соответствующую опцию для ' типы данных, чтобы сценарий'
Нажмите кнопку ОК
выберите, хотите ли Вы выход нового запроса, буфер обмена или файл
дважды нажмите кнопку Далее
ваш скрипт подготовлен в соответствии с настройками, которые вы выбрали выше
Нажмите Кнопку Готово
можно использовать пакет средств SSMS (доступен для SQL Server 2005 и 2008). Он поставляется с функцией для создания инструкций insert.
Это можно сделать с помощью
Visual Studioтоже (по крайней мере в версии 2013 года).в VS 2013 это также возможно фильтр список строк, на которых основан оператор inserts, это что-то невозможное в SSMS, насколько я знаю.
выполните следующие действия:
- откройте окно "Обозреватель объектов SQL Server" (меню: /View/SQL Server Object Explorer)
- открыть / развернуть базу данных и ее таблицы
- щелкните правой кнопкой мыши на таблице и выберите "Просмотр данных" из контекстного меню
- это отобразит данные в основной области
- необязательный шаг: нажмите на значок фильтра "сортировать и фильтровать набор данных" (четвертый значок слева в строке над результатом) и примените некоторый фильтр к одному или нескольким столбцам
- нажмите на значки" скрипт "или" скрипт для файла " (значки справа от верхней строки, они выглядят как маленькие листы бумага)
это создаст (условные) инструкции вставки для выбранной таблицы в активное окно или файл.
кнопки "фильтр" и "сценарий" Visual Studio 2013:
Я использую SSMS 2008 версии 10.0.5500.0. В этой версии в рамках мастера создания сценариев, вместо кнопки дополнительно, есть экран ниже. В этом случае мне нужны были только вставленные данные и никакие инструкции create, поэтому мне пришлось изменить два обведенных свойства
хранимая процедура Джейн Даллауэй: 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. Отлично подходит для быстрого сохранения "семенных" данных в системе управления версиями.
- сохраните приведенный ниже скрипт как "filename. ps1".
- внесите свои собственные изменения в области в разделе "настроить меня".
- вы можете добавить список таблиц в скрипт в любом порядке.
- вы можете открыть скрипт в 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
Я использовал этот script что я поставил на моем блоге (как создать процедуры инструкции Insert на sql server).
до сих пор работал для меня, хотя они могут быть ошибки я еще не обнаружен .
GenerateData удивительный инструмент для этого. Это также очень легко сделать настройки к нему, потому что исходный код доступен для вас. Несколько приятных особенностей:
- Генератор имен для имен и мест народов
- возможность сохранения профиля генерации (после его загрузки и настройки локально)
- возможность настройки и управления генерацией через скрипты
- много различных выходов (CSV, Javascript, JSON и др.) для данные (в случае, если вам нужно протестировать набор в разных средах и хотите пропустить доступ к базе данных)
- свободный. Но подумайте о пожертвовании, если вы найдете программное обеспечение полезным :).
Я использую 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



Comments