You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过命令行生成MS-SQL数据库备份脚本?Windows认证如何配置?

MS SQL命令行生成结构+数据备份脚本(类似MySQL mysqldump)

刚好我之前也折腾过这个需求,MS SQL里有几个对应mysqldump的命令行方案,给你整理成实用的步骤:

1. 推荐:用mssql-scripter(官方跨平台工具)

这个是微软官方推出的开源工具,用法和mysqldump几乎一致,支持导出结构+数据,还能指定要导出的对象类型,非常省心。

首先得先安装它,用pip就行(前提是你装了Python):

pip install mssql-scripter

1.1 SQL Server身份认证(对应MySQL的-u/-p)

直接用下面的命令,把参数换成你的实际信息:

mssql-scripter -S <你的服务器实例> -d <数据库名> -U <用户名> -P <密码> --include-objects "Tables,Sequences" --schema-and-data > db_backup.sql

参数说明:

  • -S:比如你的本地默认实例就是localhost,如果是命名实例(比如SQLEXPRESS)就写localhost\SQLEXPRESS
  • -U/-P:对应MySQL的-u和-p,注意这里密码是大写-P,直接跟密码不需要空格
  • --include-objects:明确指定要导出表和序列,避免导出其他不需要的对象
  • --schema-and-data:同时导出结构(CREATE语句)和数据(INSERT语句)

1.2 Windows身份认证(集成登录)

不需要输入用户名密码,改用-E参数表示用当前Windows账号登录:

mssql-scripter -S <你的服务器实例> -d <数据库名> -E --include-objects "Tables,Sequences" --schema-and-data > db_backup.sql

2. 原生方案:用sqlcmd配合自定义脚本

如果不想装额外工具,SQL Server自带的sqlcmd也能搞定,不过需要自己写个SQL脚本生成语句。

2.1 Windows身份认证版本

先创建一个名为generate_backup.sql的脚本文件,内容如下(简化版,能生成基础的CREATE和INSERT语句,复杂表可能需要调整):

-- 生成所有CREATE SEQUENCE语句
SELECT 'CREATE SEQUENCE ' + QUOTENAME(s.name) + '.' + QUOTENAME(seq.name) + ' ' + 
       'AS ' + TYPE_NAME(seq.system_type_id) + ' ' +
       'START WITH ' + CAST(seq.start_value AS VARCHAR(MAX)) + ' ' +
       'INCREMENT BY ' + CAST(seq.increment AS VARCHAR(MAX)) + ' ' +
       'MINVALUE ' + ISNULL(CAST(seq.min_value AS VARCHAR(MAX)), 'NO MINVALUE') + ' ' +
       'MAXVALUE ' + ISNULL(CAST(seq.max_value AS VARCHAR(MAX)), 'NO MAXVALUE') + ' ' +
       'CYCLE ' + CASE WHEN seq.is_cycling = 1 THEN 'ON' ELSE 'OFF' END + ' ' +
       'CACHE ' + CASE WHEN seq.is_cached = 1 THEN CAST(seq.cache_size AS VARCHAR(MAX)) ELSE 'OFF' END + ';'
FROM sys.sequences seq
JOIN sys.schemas s ON seq.schema_id = s.schema_id;

-- 生成所有CREATE TABLE语句(基础结构,不含索引/约束等,需完善的话可以查系统视图)
SELECT 'CREATE TABLE ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) + ' (' +
       STRING_AGG(QUOTENAME(c.name) + ' ' + TYPE_NAME(c.system_type_id) + 
                  CASE WHEN c.is_nullable = 0 THEN ' NOT NULL' ELSE '' END, ', ') +
       ');'
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
GROUP BY s.name, t.name;

-- 生成所有INSERT语句(适用于小表,大表建议用bcp工具)
DECLARE @TableName NVARCHAR(255);
DECLARE table_cursor CURSOR FOR
SELECT QUOTENAME(s.name) + '.' + QUOTENAME(t.name)
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id;

OPEN table_cursor;
FETCH NEXT FROM table_cursor INTO @TableName;

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT 'INSERT INTO ' + @TableName + ' SELECT * FROM ' + @TableName + ';';
    FETCH NEXT FROM table_cursor INTO @TableName;
END

CLOSE table_cursor;
DEALLOCATE table_cursor;

然后打开命令提示符,执行:

sqlcmd -S <你的服务器实例> -d <数据库名> -E -i "generate_backup.sql" -o "db_backup.sql"
  • -E:表示使用Windows集成认证,不用输账号密码
  • -i:指定要执行的SQL脚本文件
  • -o:指定输出的备份脚本文件名

2.2 SQL Server身份认证版本

把上面命令里的-E换成-U <用户名> -P <密码>就行:

sqlcmd -S <你的服务器实例> -d <数据库名> -U <用户名> -P <密码> -i "generate_backup.sql" -o "db_backup.sql"

小提示

  • 如果是本地默认实例,-S直接写localhost就行;命名实例记得加上实例名,比如localhost\SQLEXPRESS
  • mssql-scripter还有很多进阶参数,比如排除特定对象、生成DROP语句等,输入mssql-scripter --help就能查看所有选项

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:47:50