2013-06-24 10 views
5

In SQL Server 2008 R2, un utente può eseguire lo script di una tabella con i dati facendo clic con il pulsante destro del mouse sul database, selezionando Tasks e Generate Scripts. Apparirà una procedura guidata che chiederà agli utenti cosa desiderano (più tabelle, una tabella, ecc.) Insieme ad alcune opzioni avanzate (che consentono all'utente di ottenere sia lo schema della tabella che i dati); per domande, see this useful post of what's being done (sotto "The Handy").con dati dal codice

Sfortunatamente, SQL Server non dispone di uno script per generare questi script e, occasionalmente, è necessario eseguire lo script di alcune tabelle con tutti i dati al loro interno. Invece di farlo manualmente ogni volta, ho pensato che sarebbe stato più semplice fare in modo che un'applicazione C# chiamasse questi processi per una tabella di test e generasse uno script per la tabella con tutti i dati, salvandolo come file locale.

Quando utilizzo lo SqlConnection, non ho visto un'opzione per eseguire questo tipo di attività (anche se potrebbe essere con qualcos'altro). Come è accessibile questo wizard?

Aggiornamento: Dopo la risposta iniziale, ho pensato che questo non fosse possibile, quindi ho elaborato una soluzione interessante, per chi ha maggiore familiarità con TSQL. Ho creato una stored procedure simile a quella qui sotto:

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 

questo modo si crea uno script con il tavolo ed i dati (Ho avuto l'idea da uno script simile che Bill Fellows created). Ad ogni modo, questa soluzione funziona anche, ed è abbastanza utile per le persone più familiari con TSQL. Grazie ancora a tutti coloro che hanno risposto.

+3

Ho modificato il titolo. Per favore vedi, "[Le domande dovrebbero includere" tag "nei loro titoli?] (Http://meta.stackexchange.com/questions/19190/)", dove il consenso è "no, non dovrebbero". –

risposta

3

Si consiglia di verificare SQL Server Management Objects (SMO). Ho usato questo per creare script personalizzati in applicazioni .NET, ma non sono sicuro che supporti lo scripting dei dati.

Da MSDN:

SQL Server Management Objects (SMO) sono oggetti progettati per gestione programmatica di Microsoft SQL Server. È possibile utilizzare SMO su creare applicazioni di gestione SQL Server personalizzate.

+2

SMO supporta i dati di scripting. Vedi qui per un esempio: http://stackoverflow.com/questions/5365408/c-sharp-smo-scripting-table-data-to-file-throwing-error – RBarryYoung

+0

@ahkvk Grazie che è ESATTAMENTE quello che stavo cercando - eccezionale! – Question3CPO

2

La procedura guidata è una funzionalità di SQL Management Console e disponibile solo da lì. Non fa parte della classe SqlConnection o di qualsiasi parte dello stesso .NET Framework.

Questo è un po 'come chiedere dove si trova la finestra di dialogo Caratteri quando si crea un'istanza di un oggetto di automazione di Word nel codice.

+0

Fa parte di SMO nel framework .Net. Questo è anche il modo in cui SSMS lo fa (per la maggior parte). – RBarryYoung

+0

@catfood Grazie; prima dell'altra risposta, ho pensato che non fosse possibile e ho trascorso alcune ore a progettare la mia soluzione, che era un esercizio impegnativo. – Question3CPO

+0

E ho imparato qualcosa su SMO. Grazie, RBarryYoung. Mi dispiace di ingannarti, Question3CPO. – catfood

0

È possibile eseguire questa operazione utilizzando SQL Server Management Studio. Fare clic destro su Istanza database -> Attività -> Genera script -> Quindi riempire Introduzione e Riempi oggetto (in cui selezionare le tabelle che si desidera lo script di dati) -> Ora in Imposta opzione di script -> Fare clic su Avanzate e quindi In Sezione Generale -> Imposta il tipo di dati per lo script solo come dati dal solo schema. Otterrai uno script di dati completo come posizione selezionata.

+1

L'OP lo sa sulla base della sua domanda - sta chiedendo c'è un modo per farlo da un punto di vista API e non deve passare attraverso SSMS per eseguire questa operazione. – tsells

1

La funzionalità per lo script degli schemi non è nelle librerie sql, è nelle librerie di Visual Studio.

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

La squadra studio visivo/un ragazzo chiamato Gert Drapers http://blogs.msdn.com/b/gertd/ lavorato su qualcosa che si chiama Visual Studio Team System edizione 2008 del database - la sua dimenticato ora, ma la sua ancora lì nascosto in edizione VS2010 e VS2012 Enterprise (o quello che ogni sua ora chiamato). Hai la possibilità di confrontare schema e dati dai database, come hanno fatto questo? Microsoft ha scritto un carico shed di classi su di esso, che è possibile utilizzare.

C'è un sacco di funzionalità non sfruttate, ovviamente questo non risponde direttamente alla tua domanda, (SMO), ma si spera che ti dia l'idea che è possibile e qualcun altro ha fatto gran parte del lavoro.

Hai visto SQLPackage.exe? Quello schema e dati sono tutti racchiusi in un file zip.