Script entire database SQL-Server

前端 未结 7 1296
慢半拍i
慢半拍i 2020-12-02 13:06

Is there a way I can get a scripting of all tables, procs, and other objects from a database? I know there\'s an option to script the database but it only gave me some sort

7条回答
  •  旧时难觅i
    2020-12-02 13:18

    We ended up using a combination of SSMS script generation to extract schema and data, and then use our own database tool which allows keyword parsing and token based replacement in scripts. It also ensures scripts are only applied once.

    Why?

    • We need to support installations on SQL Server 2000, 2005 and 2008, and there are changes to data types between versions, e.g. 2005+ have nvarchar(max), whereas 2000 only supports ntext. So our scripts use a token and based upon the db choice replaces with the correct type.
    • Execution of some scripts requires a wait period after execution, e.g. We found if you didn't wait a few seconds after creating a new databases via a script, the SQL Server might fail sometimes (because it hasn't had time to create the db files) when it went on to create tables, etc.
    • We wanted to maintain a history of what scripts were executed and when.
    • We wanted to allow our Wix MSI installer to specify connection string and credentials, and needed some way to pass these into the scripts, so once again, using tokens and some conditional logic.

    Example script (edited for brevity)

    -- Sleep: 5 
    -- Sleep after creating database to allow file system to create db files
    CREATE DATABASE [$Database$]
    GO
    
    EXEC sp_dbcmptlevel [$Database$], $CompatabilityLevel$
    GO
    
    USE [$Database$]
    GO
    
    IF '1'!='$IntegratedSecurity$'
    BEGIN
        CREATE LOGIN [$Login$] WITH PASSWORD=N'$Password$', DEFAULT_DATABASE=[$Database$]
        CREATE USER [$User$] FOR LOGIN [$Login$]
        EXEC sp_addrolemember N'db_owner', N'$User$'
    END
    GO
    

提交回复
热议问题