【问题标题】:SQL Server 2008 automated database drop, create and fillSQL Server 2008 自动化数据库删除、创建和填充
【发布时间】:2009-08-31 12:26:26
【问题描述】:

对于我项目中的数据库,我有一个用于数据库的删除/创建脚本、一个用于创建表和 SP 的脚本以及一个带有一些导出值的 Access 2003 .mdb 文件。

要从头开始设置数据库,我可以使用我的 SQL 管理工作室先运行一个脚本,然后运行另一个脚本,最后手动运行这种繁琐的导入任务。

但我希望尽可能自动化。希望类似于将这三个文件与第四个脚本一起执行的文件夹。看起来像:

run script "dropcreate.sql"
run script "createtables.sql"
import "values.mdb"

这是怎么做到的?我希望避免使用 SSIS 之类的。棘手的当然是数据的导入,我似乎找不到简单的方法。同样重要的是,文件保持原样而不嵌入任何内容。

【问题讨论】:

    标签: sql sql-server automation import


    【解决方案1】:
    :: DOC AT THE END 
    
    @ECHO OFF
    ::BOOM BOOM BOOM CHANGE THIS ONE WHEN YOU ARE INSTALLAING DIFFERENT DATABASE
    SET DbName=CAS_DEV
    
    
    ECHO CREATE FIRST BACKUP OF ALL DATABASES ON THE DEFAULT INSTANCE ONES: 
    ECHO CREATING THE LOG FILES
    
    echo THIS IS THE ERROR LOG OF THE UPDATE OF THE %DbName% ON %DATE% >error.log
    echo THIS IS THE INSTALL LOG OF THE UPDATE OF THE %DbName% ON %DATE% >install.log
    
    
    ECHO STARTTING BACKUP 
    CD .\0.BackUp
    ECHO FOR EACH SQL FILE DO RUN IT THIS WILL TAKE A WHILE 
    ECHO SINCE WE ARE GOING TO MAKE A BACKUP FOR ALL THE DATABASES ON THE CURRENT HOST 
    
    for /f %%i  in ('dir *.SQL /s /b /o') DO ECHO   %DATE% --- %TIME% RUNNING  %%i 1>>"..\install.log"&SQLCMD -U ysg -P pass -H hostname -d MASTER  -t 30000 -w 80 -u -p 1 -b -i %%i  -r1 1>> "..\install.log" 2>> "..\error.log" 
    
    
    ECHO GO ONE FOLDER UP 
    
    ECHO SLEEP FOR 1 SECOND 
    ping -n 1 127.0.0.1 >NUL
    ECHO DONE WITH BACKUP GOING UP 
    cd ..
    
    ECHO THE BACKUPS ARE IN THE FOLDER
    ECHO D:\DATA\BACKUPS
    ECHO CLICK A KEY TO CONTINUE
    ECHO ========================================================================================================================
    PAUSE
    
    
    
    
    ECHO STARTING INSTALLING FUNCTIONS
    CD ".\1.Functions"
    ECHO FOR EACH SQL FILE DO RUN IT 
    ping -n 1 127.0.0.1 >NUL
    
    for /f %%i  in ('dir *.SQL /s /b /o') DO ECHO   %DATE% --- %TIME% RUNNING  %%i 1>>"..\install.log"&SQLCMD -U ysg -P pass -H hostname -d %DbName% -t 3000 -w 80 -u -p 1 -b -i "%%i" -r1 1>> "..\install.log" 2>> "..\error.log" 
    
    ECHO DONE WITH STORED PROCEDDURES GOING UP 
    cd .. 
    ping -n 1 127.0.0.1 >NUL 
    
    ECHO HIT A KEY AFTER PAUSE 
    PAUSE
    
    
    
    
    ECHO START TO EXECUTE THE MIXED FILES
    CD .\1.Mixed
    ECHO CREATING THE LOG FILES
    echo. >>"..\error.log"
    echo. >>"..\install.log"
    ECHO FOR EACH SQL FILE DO RUN IT 
    
    for /f %%i  in ('dir *.SQL /s /b /o') DO ECHO   %DATE% --- %TIME% RUNNING  %%i 1>>"..\install.log"&SQLCMD -U ysg -P pass -H hostname -d %DbName% -t 3000 -w 80 -u -p 1 -b -i %%i  -r1 1>> "..\install.log" 2>> "..\error.log" 
    
    ECHO GO ONE FOLDER UP 
    cd ..
    
    ECHO SLEEP FOR 1 SECOND 
    ping -n 1 127.0.0.1 >NUL
    ECHO DONE WITH MIXED GOING UP 
    
    ECHO HIT A KEY AFTER PAUSE 
    PAUSE
    ECHO STARTING INSTALLING TABLES 
    CD .\2.Tables
    ECHO FOR EACH SQL FILE DO RUN IT 
    ping -n 1 127.0.0.1 >NUL
    
    for /f %%i  in ('dir *.SQL /s /b /o') DO ECHO   %DATE% --- %TIME% RUNNING  %%i 1>>"..\install.log"&SQLCMD -U ysg -P pass -H hostname -d %DbName% -t 3000 -w 80 -u -p 1 -b -i "%%i" -r1 1>> "..\install.log" 2>> "..\error.log" 
    
    
    ping -n 1 127.0.0.1 >NUL
    ECHO DONE WITH TAbles GOING UP 
    cd .. 
    ping -n 1 127.0.0.1 >NUL 
    
    ECHO HIT A KEY AFTER PAUSE 
    PAUSE
    
    ECHO STARTING INSTALLING Views
    CD ".\3.Views"
    ECHO FOR EACH SQL FILE DO RUN IT 
    ping -n 1 127.0.0.1 >NUL
    
    for /f %%i  in ('dir *.SQL /s /b /o') DO ECHO   %DATE% --- %TIME% RUNNING  %%i 1>>"..\install.log"&SQLCMD -U ysg -P pass -H hostname -d %DbName% -t 3000 -w 80 -u -p 1 -b -i "%%i" -r1 1>> "..\install.log" 2>> "..\error.log" 
    
    ECHO DONE WITH Views GOING UP 
    cd .. 
    ping -n 1 127.0.0.1 >NUL 
    
    ECHO HIT A KEY AFTER PAUSE 
    PAUSE
    
    
    
    ECHO STARTING INSTALLING stored procedures
    CD ".\5.StoredProcedures"
    ECHO FOR EACH SQL FILE DO RUN IT 
    ping -n 1 127.0.0.1 >NUL
    
    for /f %%i  in ('dir *.SQL /s /b /o') DO ECHO   %DATE% --- %TIME% RUNNING  %%i 1>>"..\install.log"&SQLCMD -U ysg -P pass -H hostname -d %DbName% -t 3000 -w 80 -u -p 1 -b -i "%%i" -r1 1>> "..\install.log" 2>> "..\error.log" 
    
    ECHO DONE WITH STORED PROCEDDURES GOING UP 
    cd .. 
    ping -n 1 127.0.0.1 >NUL 
    
    ECHO HIT A KEY AFTER PAUSE 
    PAUSE
    
    ECHO STARTING INSTALLING Triggers
    CD ".\6.Triggers"
    ECHO FOR EACH SQL FILE DO RUN IT 
    ping -n 1 127.0.0.1 >NUL
    
    for /f %%i  in ('dir *.SQL /s /b /o') DO ECHO   %DATE% --- %TIME% RUNNING  %%i 1>>"..\install.log"&SQLCMD -U ysg -P pass -H hostname -d %DbName% -t 3000 -w 80 -u -p 1 -b -i "%%i"  -r1 1>> "..\install.log" 2>> "..\error.log" 
    
    ping -n 1 127.0.0.1 >NUL
    ECHO DONE WITH Triggers GOING UP 
    cd .. 
    
    ping -n 1 127.0.0.1 >NUL 
    
    ECHO HIT A KEY AFTER PAUSE 
    PAUSE
    
    
    ECHO Please , Review the log files and sent them back to Advanced Application Support 
    
    
    set mailadd= yordan.georgiev^@oxit.fi
    
    :: WE USE THE "%cd%\bin\bmail.exe".EXE UTILITY TO SEND OURSELF AN E-MAIL CONTAINING THE TEXT FILE 
    :: ALTERNATIVE SMTP MIGHT BE company.com, UNCOMMENT THE NEXT LINE FOR ALTERN
    ::cmd /c "%cd%\bin\bmail.exe" -s company.com -m %computername%.txt -t %mailadd% -a %computername% -h 
    ::"%cd%\bin\bmail.exe" -s smtp.company.com -m install.log -t yordan.georgiev@oxit.fi -a "POC 1.2 install log" -h
    
    ::"%cd%\bin\bmail.exe" -s smtp.company.com -m error.log -t yordan.georgiev@oxit.fi -a "POC 1.2 error log" -h
    
    
    
    
    
    cmd /c start /max INSTALL.LOG
    CMD /C start /MAX ERROR.LOG
    echo DONE !!!
    ECHO HIT A KEY TO EXIT 
    PAUSE
    
    
    :: WE GO TROUGH ALL THE FOLDERS AND RUN THE SQL FILES IN ALPHABETIC ORDER 
    

    【讨论】:

      【解决方案2】:

      您可以在SQLCMD mode 中运行 SQL Server Management Studio。在那里你可以运行如下脚本

      :r c:\temp\DropCreate.SQL :r c:\temp\CreateTables.SQL

      或者,您可以使用SQLCMD.exe 命令从批处理文件运行整个操作。

      SQLCMD -S "." -E -i "c:\temp\DropCreate.SQL" SQLCMD -S "." -E -i "c:\temp\CreateTables.SQL"

      您是否有可以为您导入数据的 SSIS 替代方案?通常,要进行任何类型的转换和加载,您需要错误处理、查找等,除非您使用现成的产品,否则您必须自己编写代码。

      你可以阅读很多about SSIS right here on SO

      我们有一个类似的项目(创建数据库、加载数据、创建代码)。我们在一个数据库项目中完成所有这些工作 - 使用 Visual Studio Team System Edition 2008 和 GDR2。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-17
        相关资源
        最近更新 更多