В SQL Server 2008 R2 пользователь может создать таблицу с данными, щелкнув правой кнопкой мыши по базе данных, выбрав Tasks
и Generate Scripts
. Появится мастер, который попросит пользователей, что они хотят (несколько таблиц, одна таблица и т. Д.) Вместе с некоторыми дополнительными параметрами (которые позволяют пользователю получить как схему таблицы, так и данные); для вопросов, see this useful post of what's being done (под «The Handy»).Таблица сценариев с данными из кода
К сожалению, 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
Это создает сценарий с таблицей и данных (я получил идею от подобного сценария, Bill Fellows created). В любом случае, это решение также работает, и это очень удобно для людей, более знакомых с TSQL. Еще раз спасибо всем, кто ответил.
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –