2013-06-24 32 views
5

在SQL Server 2008 R2中,用戶可以通過右鍵單擊數據庫,選擇TasksGenerate Scripts,用數據編寫表格。一個嚮導會彈出,向用戶詢問他們想要什麼(多個表,一個表等)以及一些高級選項(允許用戶獲得表模式和數據);對於問題,see this useful post of what's being done(在「方便」下)。腳本表與代碼中的數據

不幸的是,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的人來說非常方便。再次感謝所有回答的人。

+3

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

3

您應該檢查出SQL Server Management Objects (SMO)。我已經使用它在.NET應用程序中創建自定義腳本,但是我不確定它是否支持腳本化數據。

從MSDN:

SQL Server管理對象(SMO)是專爲微軟的SQL Server 規劃管理對象。您可以使用SMO到 構建定製的SQL Server管理應用程序。

+2

SMO確實支持腳本數據。看到這裏的一個例子:http://stackoverflow.com/questions/5365408/c-sharp-smo-scripting-table-data-to-file-throwing-error – RBarryYoung

+0

@ahkvk謝謝,這是我正在尋找 - 真棒! – Question3CPO

2

嚮導是SQL管理控制檯的一項功能,只能從此處使用。它不是SqlConnection類或.NET Framework本身的任何部分的一部分。

這就好比在代碼中實例化Word自動化對象時,詢問字體對話框的位置。

+0

它是.Net框架中的SMO的一部分。這也是SSMS如何做到的(大部分)。 – RBarryYoung

+0

@catfood謝謝;在另一個答案之前,我認爲這是不可能的,並花了幾個小時來設計我自己的解決方案,這是一個具有挑戰性的練習。 – Question3CPO

+0

我學到了一些關於SMO的知識。謝謝,RBarryYoung。抱歉誤導你,Question3CPO。 – catfood

0

您可以使用SQL Server Management Studio執行此操作。 右鍵單擊數據庫實例 - >任務 - >生成腳本 - >然後填寫介紹和填充對象(在哪個選擇表中您想要數據腳本) - >現在在設置腳本選項 - >點擊高級,然後在常規部分 - >將數據類型設置爲僅作爲數據僅從架構腳本中進行腳本。您將獲得完整的數據腳本作爲選定的位置。

+1

OP知道這是基於他的問題 - 他問是否有一種方法可以從API的角度來做到這一點,而不必通過SSMS來執行此操作。 – tsells

1

腳本化模式的功能不在sql庫中,它在Visual Studio庫中。

E.g. Microsoft.Data.Schema.ScriptDom.Sql,Microsoft.Data.Schema。ScriptDom;

在Visual Studio團隊/曾爲一個名爲格特·布商行http://blogs.msdn.com/b/gertd/ 傢伙的東西叫做Visual Studio團隊系統2008年數據庫版 - 它遺忘了,但它仍然存在隱藏在VS2010和VS2012企業版(或者是每個公司現在所謂的)。您可以比較數據庫的模式和數據,他們是如何做到這一點的? 微軟寫了一個類的卸載裝置,可以使用它。

有很多未開發的功能,當然這並不能直接回答你的問題(SMO),但希望它給你一個想法,認爲它可能和別人已經完成了大部分工作。

你見過SQLPackage.exe嗎?模式和數據都被打包成一個zip文件。