Таблица скриптов с данными из кода
В SQL Server 2008 R2 пользователь может создать сценарий для таблицы с данными, щелкнув правой кнопкой мыши базу данных и выбрав Tasks
а также Generate Scripts
, Появится мастер, спрашивающий пользователей, чего они хотят (несколько таблиц, одна таблица и т. Д.), А также некоторые расширенные параметры (которые позволяют пользователю получать как схему таблицы, так и данные); вопросы см. в этом полезном посте о том, что делается (в разделе "Удобный").
К сожалению, SQL Server не имеет сценария для генерации этих сценариев, и иногда нам приходится создавать сценарии для некоторых таблиц со всеми данными в них. Вместо того, чтобы делать это каждый раз вручную, я подумал, что было бы проще, если бы приложение C# вызывало эти процессы для тестовой таблицы и генерировало скрипт для таблицы со всеми данными, сохраняя его как локальный файл.
Когда я использую SqlConnection
Я не видел возможности выполнить задачу такого типа (хотя это может быть связано с чем-то другим). Как этот мастер доступен?
Обновление: после первоначального ответа я предположил, что это невозможно, поэтому я разработал интересное решение для тех, кто более знаком с TSQL. Я создал хранимую процедуру, аналогичную приведенной ниже:
CREATE PROCEDURE usp_ScriptTableAndData
AS
BEGIN
CREATE TABLE ScriptTemp(
Value VARCHAR(8000)
)
INSERT INTO ScriptTemp
SELECT '/* Build the Reference Table */'
INSERT INTO ScriptTemp
SELECT 'USE [DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Table](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Reference] [varchar](50) NULL,
[TableDate] [datetime] NOT NULL,
[Display] [bit] NULL
)
SET ANSI_PADDING OFF
GO
INSERT INTO ScriptTemp
SELECT '/* Insert the Table Values */'
INSERT INTO ScriptTemp
SELECT 'INSERT INTO Table VALUES(' + CAST(ID AS VARCHAR(3)) +
',' + '''' + LTRIM(RTRIM(ISNULL(Reference,'NULL'))) + '''' +
',' + '''' + CONVERT(VARCHAR(25),TableDate,120) + '''' +
',' + ISNULL(CAST(Display AS VARCHAR(4)),'NULL') + ')'
FROM dbo.Table
EXECUTE xp_cmdshell 'BCP "SELECT * FROM DB.dbo.ScriptTemp" queryout "\\FileSharePath\Script.sql" -T -c -SSERVER'
DROP TABLE ScriptTemp
END
Это создает сценарий с таблицей и данными (идея пришла от аналогичного сценария, созданного Биллом Феллоузом). В любом случае, это решение также работает и весьма удобно для людей, более знакомых с TSQL. Еще раз спасибо всем, кто ответил.
4 ответа
Вы должны проверить объекты управления SQL Server (SMO). Я использовал это для создания пользовательских сценариев в приложениях.NET, но я не уверен, поддерживает ли он сценарии данных.
Из MSDN:
Объекты управления SQL Server (SMO) - это объекты, предназначенные для программного управления Microsoft SQL Server. Вы можете использовать SMO для создания пользовательских приложений управления SQL Server.
Мастер является функцией консоли управления SQL и доступен только оттуда. Это не часть SqlConnection
класс или любая часть самого.NET Framework.
Это похоже на вопрос о том, где находится диалоговое окно "Шрифты", когда вы создаете объект автоматизации Word в своем коде.
Функциональность для написания сценариев не в библиотеках sql, а в библиотеках visual studio.
Например, Microsoft.Data.Schema.ScriptDom.Sql, Microsoft.Data.Schema.ScriptDom;
Команда Visual Studio / парень по имени Gert Drapers http://blogs.msdn.com/b/gertd/ Работал над чем-то, называемым выпуском базы данных Visual Studio Team System 2008 - о нем сейчас забыли, но он все еще там спрятан в VS2010 и VS2012 Корпоративная редакция (или как ее теперь называют). Вы получаете возможность сравнивать схему и данные из баз данных, как они это сделали? Microsoft написала множество классов, которые вы можете использовать.
Есть много неиспользованных функциональных возможностей, конечно, это не дает прямого ответа на ваш вопрос (SMO), но, надеюсь, это дает вам представление о том, что это возможно, и кто-то другой сделал большую часть работы.
Вы видели SQLPackage.exe? Это делает схему и данные все упакованными в zip-файл.
Вы можете сделать эту операцию с помощью SQL Server Management Studio. Щелкните правой кнопкой мыши на Экземпляре базы данных -> Задача -> Создать сценарии -> Затем заполните Введение и заполните Объект (в каких таблицах вы хотите сценарий данных) -> Теперь в параметре "Задать сценарии" -> Нажмите "Дополнительно", а затем "В общем разделе" -> "Установить" Тип данных для сценария как данные только из схемы только. Вы получите полный скрипт данных в качестве выбранного местоположения.