中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-08-09 20:39
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【原创】批处理完成SQLSERVER数据库的附加、分离。 查看 1,170 回复 7
楼 主 【原创】批处理完成SQLSERVER数据库的附加、分离。 发表于 2008-09-24 14:54 ·  中国 江西 南昌 电信
初级用户
积分 38
发帖 17
注册 2008-04-10 15:23
18年会员
UID 115485
性别 男
状态 离线
功能:把同目录下的.MDF、.LDF数据库备份文件,复制到SQLSERVER数据库文件目录中。进行附加和分离操作。
还有很多问题还没解决,如:服务器未开返回的错误如何判断,如何在数据库中停止和启动MSSQLServer..等。
谢谢HAT版主、vampire的帮助
===============================================
代码:
---------------------------------------------------------------------------------------------------------
@echo off
cls
color 0a
rem SQLSERVER2000 数据库附加、分离的小程序
rem 下面是变量的一些定义,dbloginname是数据库登入名,dbloginpwd是数据库登入密码,dbname是数据库名,dbmdf和

dbldf是数据库文件
set dbloginname=sa
set dbloginpwd=wl
set dbname=workflow
set dbmdf=workflow_Data.MDF
set dbldf=workflow_Log.LDF

>"%temp%\my.vbs" echo Set WshShell = WScript.CreateObject("WScript.Shell")
>>"%temp%\my.vbs" echo WScript.Echo

WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Setup\SQLDataRoot")
for /f "delims=" %%a in ('cscript /nologo "%temp%\my.vbs"') do set SQL=%%a\Data

echo SQLSERVER数据库文件目录路径:%SQL%
echo.
echo 正在复制mdf,请等待...
copy %dbmdf% "%SQL%"
echo 正在复制ldf,请等待...
copy %dbldf% "%SQL%"
echo 复制的文件名是:%dbmdf%和%dbldf%
:start
cls
echo.
echo============================================================================
echo.
echo 请输入选择项后,按回车确认
echo 1.附加数据库
echo 2.分离数据库
echo 3.退出
echo.
echo author:AUGVII
echo============================================================================
set /p var=请选择:
if %var% == 1 goto attachdb
if %var% == 2 goto detachdb
if %var% == 3 goto exit

:detachdb
osql -U"%dbloginname%" -P"%dbloginpwd%" -S"127.0.0.1" -Q"sp_detach_db '%dbname%'"
echo 处理中...
echo db detach successful!
pause
goto start

:attachdb
osql -U"%dbloginname%" -P"%dbloginpwd%" -S"127.0.0.1" -Q"sp_attach_db

'%dbname%','%SQL%\%dbmdf%','%SQL%\%dbldf%'"
echo 处理中...
echo db attach successful!
pause
goto start

:exit
echo 欢迎使用...
pause
==================================================
2 发表于 2008-09-24 15:14 ·  美国 惠普HP
初级用户
积分 33
发帖 16
注册 2008-08-21 20:58
17年会员
UID 123805
性别 男
状态 离线
启动

net start MSSQLSERVER

停止

net stop MSSQLSERVER
3 发表于 2008-09-24 15:29 ·  中国 江西 南昌 电信
初级用户
积分 38
发帖 17
注册 2008-04-10 15:23
18年会员
UID 115485
性别 男
状态 离线
如何对错误进行判断,再进行处理呢?
如:服务器未打开,进行附加就会报错SQL Server 不存在或访问被拒绝
errorlevel 是多少?哪里有这方面的资料?
好像可以echo出来。

[ Last edited by augvii on 2008-9-24 at 03:35 PM ]
4 发表于 2008-09-24 15:30 ·  美国 惠普HP
初级用户
积分 33
发帖 16
注册 2008-08-21 20:58
17年会员
UID 123805
性别 男
状态 离线
@echo off
for /f "tokens=4 delims= " %%a in ('sc query MSSQLSERVER^|findstr "STATE"') do (
if "%%a" neq "RUNNING" (
echo 数据库服务器未开
) else (
echo 数据库服务器开啦
)
)
5 发表于 2008-09-24 15:38 ·  中国 江西 南昌 电信
初级用户
积分 38
发帖 17
注册 2008-04-10 15:23
18年会员
UID 115485
性别 男
状态 离线
echo %errorlevel%
启动为:0
未启动为:1
这样判断可以吗?
-------------------------------------------
6 发表于 2008-09-24 15:56 ·  中国 江西 南昌 电信
初级用户
积分 38
发帖 17
注册 2008-04-10 15:23
18年会员
UID 115485
性别 男
状态 离线
sc 还像在win2000下不支持啊,有没有更通用点的啊。我的系统是win2000的
7 发表于 2008-09-24 16:00 ·  美国 惠普HP
初级用户
积分 33
发帖 16
注册 2008-08-21 20:58
17年会员
UID 123805
性别 男
状态 离线
:attachdb
osql -U"%dbloginname%" -P"%dbloginpwd%" -S"127.0.0.1" -Q"sp_attach_db '%dbname%','%SQL%\%dbmdf%','%SQL%\%dbldf%'" 2>nul
if %errorlevel% neq 0 (
echo 数据库服务器未开
goto :exit
)
8 发表于 2008-09-24 16:23 ·  中国 江西 南昌 电信
初级用户
积分 38
发帖 17
注册 2008-04-10 15:23
18年会员
UID 115485
性别 男
状态 离线
如果该数据库已经存在,再附加。数据库已经分离,再分离。
这两种错误该如何获取呢?
论坛跳转: