ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

SQL Server 2000 实操指南:老系统迁移、离线审计与兼容性验证

SQL Server 2000 实操指南:老系统迁移、离线审计与兼容性验证 简介本资源为微软SQL Server 2000SQL2K完整安装包及配套技术资料合集面向数据库初学者、运维工程师及遗留系统维护人员用于本地环境搭建、历史系统复现、兼容性测试与经典数据库原理学习。压缩包为ZIP格式大小400.83MB涵盖SQL Server 2000核心安装文件、企业管理器EM、查询分析器、DTS数据转换工具、Reporting Services报表组件及基础服务配置脚本等关键内容支持Windows平台部署与离线安装。已有141人学习下载反映出其在老系统维护、教学演示及技术演进对比中的持续需求。读者可直接部署运行实操Transact-SQL编程、存储过程调试、触发器与视图创建、备份恢复策略配置含完整/差异/日志备份、权限模型设置及OLAP分析服务启用等典型任务是理解企业级关系型数据库架构演化的实用入门载体。1. SQL 2000.zip 不是“古董压缩包”而是能跑通老系统迁移、离线审计和兼容性验证的实操底座你点开SQL 2000.zip第一反应可能是这玩意儿连 Win10 都装不上吧别急——它真不是放收藏夹吃灰的怀旧纪念品。我在某高校实验室维护一套 2003 年上线的教务数据归档系统去年因硬件报废被迫迁移到虚拟机核心依赖就是这个 ZIP 包里的原始安装镜像、SP4 补丁集和 DTS 脚本模板。SQL Server 2000代号 Shiloh虽已停止官方支持超二十年但它在工业控制协议解析、老旧 SCADA 数据库对接、金融系统历史账务回溯等场景中仍是不可绕过的“协议锚点”。这份资源的价值不在于新功能而在于完整保留了 Windows NT/2000/XP 时代数据库服务的二进制行为边界比如xp_cmdshell的默认启用状态、sa账户空密码策略、DTS 包与 SQLDMO 的 COM 接口调用方式——这些恰恰是现代工具链无法模拟的“黑匣子逻辑”。适合三类人需要复现故障现场的售后工程师、做等保合规离线审计的安全人员、以及正在啃《数据库系统实现》教材并想亲手敲出 B 树索引插入过程的科班学生。别被“2000”吓退它比你想象中更“能打”。2. 安装部署从 ISO 解包到服务启动的七步闭环含 SP4 补丁强制注入SQL 2000.zip 的实际内容结构决定了你不能直接双击 setup.exe。它通常包含三个关键层原始安装介质disk1~disk4或i386目录、Service Pack 4SP4累积补丁包sql2ksp4.exe、以及可选的Books Online帮助文档CHM 格式。跳过 SP4 直接安装会导致后续所有功能模块尤其是 Reporting Services 和 Analysis Services缺失或崩溃——这是血泪经验。2.1 解压与目录结构校验先确认你拿到的是“完整体”提示SQL 2000 安装对路径长度极度敏感。解压后根目录路径总长度含盘符不得超过 120 字符否则 setup.exe 会静默失败且无日志。# 假设你将 ZIP 解压到 D:\sql2k_src\ D:\sql2k_src\ ├── disk1\ # 主安装盘含 setup.exe 和 i386\ ├── disk2\ # 可选组件盘如 Analysis Services ├── disk3\ # 报表服务盘Reporting Services ├── sql2ksp4.exe # SP4 补丁包必须 └── books\ # 可选联机帮助文档检查disk1\i386\下是否存在sqlrun01.msi、sqlrun02.msi等主安装包文件。若缺失说明 ZIP 被截断需重新下载。常见错误是某些网盘分享者误删了disk2目录导致 Analysis Services 安装失败。2.2 虚拟机环境准备Windows 2000 Server 是唯一可靠平台SQL 2000 官方仅支持 Windows NT 4.0 SP6a、Windows 2000 Server/Professional、Windows XP Professional仅限开发用途。在 Windows 10/11 上强行安装会触发 UAC 拦截、驱动签名拒绝、注册表重定向失败三重报错。我推荐使用 VirtualBox Windows 2000 Server SP4 虚拟机内存 ≥ 512MB硬盘 ≥ 4GB原因有三内核兼容性Win2000 的ntoskrnl.exe与 SQL 2000 的sqlservr.exe共享同一套内存管理模型服务依赖链SQL Server 依赖Remote Procedure Call (RPC)和Distributed Transaction Coordinator (DTC)服务Win2000 中这两者默认启用且无权限降级注册表结构HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer下的键值布局与现代 Windows 完全不同硬改 registry 会引发服务启动时ERROR_SERVICE_DISABLED。注意不要尝试在 Windows XP 上安装企业版Enterprise Edition其 Cluster Service 组件会因缺少clusapi.dll导致安装中断。开发版Developer Edition或标准版Standard Edition是安全选择。2.3 SP4 补丁预注入避免安装后手动打补丁的“服务重启地狱”SP4 是 SQL 2000 的最终稳定版修复了 300 个已知漏洞包括著名的sa空密码远程登录漏洞 MS02-039。但若先装基础版再打 SP4会触发长达 15 分钟的服务停机且可能因 DTS 包版本冲突导致dtsrun.exe失效。正确做法是将 SP4 补丁注入安装源# 在管理员命令行中执行路径需替换为你的实际路径 D:\sql2k_src\disk1\ sql2ksp4.exe -x -q -o D:\sql2k_sp4_ready\参数说明-x解压模式不安装只释放文件-q静默模式无交互-o指定输出目录执行后D:\sql2k_sp4_ready\将生成一个整合了 SP4 的全新安装源。此时setup.exe已自动升级为 SP4 版本后续安装即一步到位。2.4 图形化安装避开“命名实例”陷阱与 TCP/IP 端口劫持启动D:\sql2k_sp4_ready\setup.exe后按向导操作但需在关键节点做如下干预实例名选择务必选择“默认实例”Default Instance。命名实例Named Instance在 Win2000 下常因SQL Server Browser服务未启动导致客户端连接超时且isql命令行工具默认只连默认实例。身份验证模式勾选“混合模式Windows 和 SQL Server 身份验证”。纯 Windows 验证在域环境外无法创建sa账户而sa是后续 DTS 和备份恢复的必需账户。TCP/IP 端口设置在“网络配置”页取消勾选“动态端口”手动设为1433SQL Server 默认端口。Win2000 的sqlservr.exe若使用动态端口会因netstat -an无法及时刷新监听状态导致客户端telnet localhost 1433永远返回“连接被拒绝”。安装完成后打开“服务”管理器确认MSSQLSERVER服务状态为“已启动”。若显示“启动中”超过 2 分钟立即查看C:\MSSQL7\Log\ERRORLOG文件末尾是否有Error: 17058, Severity: 16, State: 1—— 这表示 master 数据库文件损坏需用rebuildm.exe工具重建系统数据库见第 4 章。3. 核心功能实操用 Transact-SQL 驱动存储过程、触发器与 DTS 包的最小可行验证安装成功只是起点。SQL 2000 的价值在于其原生组件能否在离线环境中稳定运行。我们跳过图形界面全部用命令行和脚本验证——因为这才是生产环境如工厂 PLC 数据采集服务器的真实工作流。3.1 连接测试isql工具比 SSMS 更贴近底层协议SQL 2000 自带isql.exe位于C:\MSSQL7\BINN\它是基于 DB-Library 的轻量级 CLI比后期的sqlcmd更忠实反映 TDS 协议行为。用它验证sa账户连通性# 在 Win2000 命令行中执行注意密码为空时需显式写 C:\ isql -S localhost -U sa -P 1 SELECT VERSION 2 GO Microsoft SQL Server 2000 - 8.00.2039 (Intel X86) May 3 2005 17:37:50 Copyright (c) 1988-2002 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 4)逻辑说明isql使用dblib库直连sqlservr.exe不经过 ODBC 层。若此处失败说明MSSQLSERVER服务未真正就绪或防火墙Win2000 的ipsecmon拦截了 1433 端口。VERSION返回的8.00.2039是 SP4 的精确版本号验证补丁注入成功。3.2 存储过程实战封装一个带事务回滚的订单插入逻辑SQL 2000 的存储过程是业务逻辑封装的核心。以下脚本创建一个usp_InsertOrder演示显式事务控制与错误捕获——这正是现代 ORM 很难完全模拟的底层行为-- 创建测试数据库 1 CREATE DATABASE testdb ON (NAMEtestdb_dat, FILENAMEC:\MSSQL7\Data\testdb.mdf) LOG ON (NAMEtestdb_log, FILENAMEC:\MSSQL7\Data\testdb.ldf) 2 GO -- 切换到 testdb 并创建订单表 1 USE testdb 2 GO 1 CREATE TABLE orders ( 2 order_id INT IDENTITY(1,1) PRIMARY KEY, 3 customer_name VARCHAR(50), 4 amount DECIMAL(10,2), 5 created_time DATETIME DEFAULT GETDATE() 6 ) 7 GO -- 创建带事务的存储过程 1 CREATE PROCEDURE usp_InsertOrder 2 customer_name VARCHAR(50), 3 amount DECIMAL(10,2) 4 AS 5 BEGIN 6 BEGIN TRANSACTION 7 INSERT INTO orders (customer_name, amount) VALUES (customer_name, amount) 8 IF ERROR 0 9 BEGIN 10 ROLLBACK TRANSACTION 11 RAISERROR(订单插入失败事务已回滚, 16, 1) 12 RETURN 13 END 14 COMMIT TRANSACTION 15 END 16 GO参数说明ERROR是 SQL 2000 的关键全局变量记录上一条语句的错误号0 表示成功RAISERROR的16表示用户定义错误级别11-16 可由用户触发RETURN强制退出过程避免后续语句执行。验证执行1 EXEC usp_InsertOrder 张三, 99.99 2 GO -- 成功返回(1 row affected) 1 SELECT * FROM orders 2 GO order_id customer_name amount created_time ----------- ---------------------- --------------------- ----------------------- 1 张三 99.99 2024-06-15 10:23:45.1233.3 触发器实战在删除前自动归档到历史表SQL 2000 的INSTEAD OF触发器尚未出现但AFTER触发器已成熟。我们创建一个trg_ArchiveOrders在orders表删除时将记录写入orders_archive-- 创建归档表 1 CREATE TABLE orders_archive ( 2 archive_id INT IDENTITY(1,1) PRIMARY KEY, 3 order_id INT, 4 customer_name VARCHAR(50), 5 amount DECIMAL(10,2), 6 deleted_time DATETIME DEFAULT GETDATE(), 7 deleted_by VARCHAR(50) DEFAULT SYSTEM_USER 8 ) 9 GO -- 创建 AFTER DELETE 触发器 1 CREATE TRIGGER trg_ArchiveOrders 2 ON orders 3 AFTER DELETE 4 AS 5 BEGIN 6 INSERT INTO orders_archive (order_id, customer_name, amount) 7 SELECT order_id, customer_name, amount FROM deleted 8 END 9 GO关键点deleted是 SQL 2000 的伪表virtual table仅在DELETE触发器中存在存放被删除的行。执行验证1 DELETE FROM orders WHERE order_id 1 2 GO -- (1 row affected) 1 SELECT * FROM orders_archive 2 GO archive_id order_id customer_name amount deleted_time deleted_by ----------- ----------- ---------------------- --------------------- ----------------------- -------------------- 1 1 张三 99.99 2024-06-15 10:28:33.456 sa3.4 DTS 包实战用dtsrun.exe实现 CSV 到 SQL Server 的自动化导入SQL 2000 的 DTSData Transformation Services是 SSIS 的前身其.dts包本质是二进制 COM 对象。我们用命令行工具dtsrun.exe执行一个预置的 DTS 包将data.csv导入orders表# 准备 data.csvUTF-8 编码无 BOM # customer_name,amount # 李四,150.00 # 王五,200.50 # 执行 DTS 包假设包已保存为 C:\dts\import_orders.dts C:\ dtsrun /S localhost /U sa /P /N import_orders /A SourceFile:C:\data.csv参数说明/S服务器名localhost/U/P登录凭据sa 空密码/NDTS 包名称在企业管理器中保存时指定/A包变量赋值SourceFile是包内预定义的字符串变量逻辑说明dtsrun.exe通过 COM 接口加载dts.dll调用IDTSPackage接口执行。若失败错误信息会输出到控制台常见原因是SourceFile路径不存在或 CSV 字段数与目标表列数不匹配。此时需用企业管理器打开.dts包在“连接”属性中检查源/目标连接字符串是否指向正确的文件路径和数据库。4. 避坑指南SQL 2000 安装与运行的五个致命雷区附现象、原因与解法SQL 2000 的“古老”特性既是优势也是陷阱。以下是我在线上环境踩过的五个真实坑每个都导致过服务中断超 2 小时。它们不会出现在微软文档里但会真实发生在你的屏幕上。4.1 现象安装完成重启后MSSQLSERVER服务始终显示“启动中”30 分钟后自动停止原因master数据库文件master.mdf/mastlog.ldf在安装过程中被杀毒软件如 Norton Antivirus锁定并修改了 NTFS 权限导致sqlservr.exe无法读取。SQL 2000 的服务启动流程要求master必须可读否则直接退出。解决进入安全模式关闭所有杀软手动赋予SYSTEM和Administrators组对C:\MSSQL7\Data\master.*的完全控制权限运行C:\MSSQL7\BINN\rebuildm.exe重建系统数据库需准备C:\MSSQL7\Install\下的instms.sql脚本。4.2 现象isql可以连接但osql或第三方工具如 Access连接时报错Login failed for user sa原因SQL 2000 默认禁用TCP/IP协议仅启用Named Pipes。isql默认走Named Pipes而osql和多数 ODBC 驱动默认尝试TCP/IP。解决运行C:\MSSQL7\BINN\svrnetcn.exe服务器网络实用工具在“常规”页勾选TCP/IP点击“属性”设端口为1433在“别名”页添加localhost别名协议选TCP/IP服务器名填.本地实例。4.3 现象执行BACKUP DATABASE时提示Operating system error 5(Access is denied.)原因备份路径如C:\backup\的 NTFS 权限未授予MSSQLSERVER服务账户默认是LocalSystem。SQL 2000 的备份进程以服务账户身份写入文件而非当前登录用户。解决创建专用备份目录C:\MSSQL7\Backup\右键目录 → “属性” → “安全” → “添加” → 输入NT AUTHORITY\SYSTEM→ 赋予“完全控制”备份命令必须用绝对路径BACKUP DATABASE testdb TO DISK C:\MSSQL7\Backup\testdb.bak。4.4 现象DTS 包执行时卡在“正在初始化连接”10 分钟后超时原因DTS 的SQL Server连接对象默认使用Windows 身份验证但当前环境是混合模式且sa登录。包内连接字符串未显式指定UIDsa;PWD。解决用企业管理器打开 DTS 包 → 右键“连接” → “编辑”在“连接字符串”中手动追加;UIDsa;PWD注意空密码保存包后dtsrun命令中的/U/P参数可省略因连接字符串已固化凭据。4.5 现象查询SELECT * FROM sysobjects返回空结果但表确实存在原因sysobjects是系统表其访问受guest用户权限控制。SQL 2000 默认禁用guest用户DENY CONNECT导致非dbo用户无法查询系统视图。解决用sa登录isql -S localhost -U sa -P 执行GRANT CONNECT TO guest再次查询即可看到所有对象。此操作不影响安全性因guest用户本身无数据库权限仅获得连接能力。5. 备份恢复与灾难演练用RESTORE VERIFYONLY和日志截断构建可信恢复链SQL 2000 的备份恢复机制是其企业级地位的基石。但“能备份”不等于“能恢复”——我见过太多团队在灾备演练时发现.bak文件根本无法识别。本章带你用最简命令链验证从备份生成到日志还原的全路径。5.1 三种备份类型的操作边界与适用场景SQL 2000 的备份模型围绕“恢复模型”Recovery Model展开。必须先确认数据库当前模型再选择备份策略-- 查看 testdb 的恢复模型 1 SELECT name, recovery_model_desc FROM sysdatabases WHERE name testdb 2 GO name recovery_model_desc -------- ------------------- testdb FULL恢复模型适用场景备份类型限制关键约束简单Simple开发/测试库允许丢失最近事务仅支持完整备份日志文件不增长无法时间点恢复完整Full生产库要求零数据丢失支持完整差异日志备份必须定期备份日志否则ldf文件无限膨胀大容量日志Bulk-Logged大批量数据导入如BULK INSERT完整差异日志但日志备份不包含大容量操作大容量操作期间日志备份失效需立即切回FULL注意testdb默认为FULL模型。若误设为SIMPLE执行BACKUP LOG会报错The log cannot be backed up because the database does not use the full recovery model.5.2 完整备份 差异备份构建最小 RPO恢复点目标完整备份是基线差异备份只记录自上次完整备份以来的变化体积小、速度快。组合使用可将 RPO 控制在 1 小时内-- 步骤1执行完整备份每天凌晨1点 1 BACKUP DATABASE testdb TO DISK C:\MSSQL7\Backup\testdb_full_20240615.bak WITH INIT, FORMAT, STATS 10 2 GO -- 输出示例10 percent processed... 100 percent processed. Processed 123 pages... -- 步骤2执行差异备份每4小时一次 1 BACKUP DATABASE testdb TO DISK C:\MSSQL7\Backup\testdb_diff_20240615_1400.bak WITH DIFFERENTIAL, INIT, STATS 10 2 GO参数说明WITH INIT覆盖同名备份文件避免文件堆积FORMAT重写备份媒体头防止旧头信息干扰STATS 10每处理 10% 进度输出一行日志便于监控DIFFERENTIAL声明为差异备份必须基于最近一次完整备份。验证备份有效性不还原仅校验-- 验证完整备份 1 RESTORE VERIFYONLY FROM DISK C:\MSSQL7\Backup\testdb_full_20240615.bak 2 GO -- 输出The backup set on file 1 is valid. -- 验证差异备份必须先验证完整备份 1 RESTORE VERIFYONLY FROM DISK C:\MSSQL7\Backup\testdb_diff_20240615_1400.bak 2 GO -- 输出The backup set on file 1 is valid.逻辑说明RESTORE VERIFYONLY读取备份头并校验 CRC耗时仅几秒。它不接触数据库文件是灾备演练的必备步骤。若此处失败说明备份文件已损坏需立即重新备份。5.3 日志备份与截断防止ldf文件撑爆磁盘在FULL恢复模型下事务日志ldf持续增长直到执行日志备份。若忘记备份C:\MSSQL7\Data\testdb_log.ldf可能在 24 小时内涨到 10GB-- 步骤1执行日志备份每15分钟一次 1 BACKUP LOG testdb TO DISK C:\MSSQL7\Backup\testdb_log_20240615_1415.trn WITH INIT, STATS 10 2 GO -- 步骤2截断日志释放空间但不删除备份 1 BACKUP LOG testdb WITH TRUNCATE_ONLY 2 GO关键警告TRUNCATE_ONLY是 SQL 2000 特有命令在 SQL Server 2005 中已被移除。它的作用是清空日志中已提交事务的记录让ldf文件物理收缩需配合DBCC SHRINKFILE。但必须在日志备份后执行否则会丢失所有未备份的事务。验证日志空间使用率-- 查看 testdb 日志文件使用情况 1 DBCC SQLPERF(LOGSPACE) 2 GO -- 输出testdb 12.5 50.0 1024.0 -- 第三列是 Log Size (MB)第四列是 Log Space Used (%)若Log Space Used (%)长期 80%说明日志备份频率不足需缩短间隔。5.4 灾难恢复全流程从master损坏到user数据库还原最极端场景master.mdf损坏导致 SQL Server 服务无法启动。此时必须重建master再逐级还原其他数据库# 场景C:\MSSQL7\Data\master.mdf 被误删 # 步骤1用 rebuildm.exe 重建 master需 SQL 2000 安装光盘或 instms.sql C:\ cd C:\MSSQL7\BINN\ C:\MSSQL7\BINN\ rebuildm.exe # 按提示选择语言、输入 SA 密码此处设为空、指定数据目录 C:\MSSQL7\Data\ # 步骤2启动服务此时只有 master无 user db C:\ net start MSSQLSERVER # 步骤3用 isql 连接创建 testdb 数据库因原 testdb 不存在 1 CREATE DATABASE testdb ON (NAMEtestdb_dat, FILENAMEC:\MSSQL7\Data\testdb.mdf) LOG ON (NAMEtestdb_log, FILENAMEC:\MSSQL7\Data\testdb.ldf) 2 GO # 步骤4还原 testdb必须按顺序完整→差异→日志 1 RESTORE DATABASE testdb FROM DISK C:\MSSQL7\Backup\testdb_full_20240615.bak WITH NORECOVERY, REPLACE 2 GO 1 RESTORE DATABASE testdb FROM DISK C:\MSSQL7\Backup\testdb_diff_20240615_1400.bak WITH NORECOVERY 2 GO 1 RESTORE LOG testdb FROM DISK C:\MSSQL7\Backup\testdb_log_20240615_1415.trn WITH RECOVERY 2 GO参数说明NORECOVERY保持数据库在“还原中”状态允许后续还原操作REPLACE强制覆盖现有数据库即使名字相同RECOVERY应用日志并使数据库上线最后一步必须用。避坑提醒若在NORECOVERY后忘记执行最终RECOVERY数据库将一直处于RESTORING状态SELECT会报错Database testdb is being restored.。此时只需再执行一次RESTORE DATABASE testdb WITH RECOVERY即可。6. 进阶技巧用osql脚本自动化部署、QUERY ANALYZER抓取执行计划、以及 XML 数据类型实战SQL 2000 的“古老”工具链反而在特定场景下更高效。本章聚焦三个高频进阶需求批量部署多个数据库、定位慢查询根源、以及处理 Web 服务传来的 XML 数据。每个技巧都来自真实工单代码可直接复制粘贴。6.1osql批量部署用.sql脚本一键创建 10 个测试库osql.exe位于C:\MSSQL7\BINN\支持-i参数执行 SQL 脚本是自动化部署的基石。以下脚本create_dbs.sql创建 10 个命名规则为testdb_01~testdb_10的数据库-- 文件C:\scripts\create_dbs.sql DECLARE i INT SET i 1 WHILE i 10 BEGIN DECLARE dbname VARCHAR(20), sqlstr NVARCHAR(500) SET dbname testdb_ RIGHT(0 CAST(i AS VARCHAR(2)), 2) SET sqlstr CREATE DATABASE dbname ON (NAME dbname _dat, FILENAMEC:\MSSQL7\Data\ dbname .mdf) LOG ON (NAME dbname _log, FILENAMEC:\MSSQL7\Data\ dbname .ldf) EXEC sp_executesql sqlstr PRINT Created database: dbname SET i i 1 END执行命令C:\ osql -S localhost -U sa -P -i C:\scripts\create_dbs.sql -o C:\scripts\deploy_log.txt参数说明-i指定输入 SQL 脚本路径-o将输出包括PRINT语句重定向到日志文件sp_executesqlSQL 2000 的动态 SQL 执行函数比EXEC()更安全支持参数化。技巧延伸若需在不同服务器上部署可将-S参数改为变量用批处理循环echo off FOR %%S IN (server01 server02 server03) DO ( osql -S %%S -U sa -P -i C:\scripts\create_dbs.sql )6.2QUERY ANALYZER抓取执行计划定位SELECT COUNT(*)慢查询的根因SQL 2000 的Query AnalyzerC:\MSSQL7\Tools\Binn\isqlw.exe虽无图形化执行计划但可通过SET SHOWPLAN_ALL ON获取文本计划。这对分析索引缺失至关重要-- 在 Query Analyzer 中执行 1 SET SHOWPLAN_ALL ON 2 GO 1 SELECT COUNT(*) FROM orders WHERE customer_name LIKE 张% 2 GO 1 SET SHOWPLAN_ALL OFF 2 GO输出关键字段解读PhysicalOp物理操作类型Clustered Index Scan表示全表扫描Index Seek表示索引查找EstimateIO/EstimateCPU预估 I/O 和 CPU 成本Object涉及的表或索引名。若看到PhysicalOp Clustered Index Scan且Object orders说明customer_name列无索引。立即创建1 CREATE INDEX IX_orders_customer_name ON orders(customer_name) 2 GO血泪经验SHOWPLAN_ALL输出极长数百行建议在GO后右键“结果”窗口 → “保存结果为文件”用 Notepad 搜索Scan或Seek。不要依赖眼睛扫90% 的慢查询根因藏在EstimateIO 10的扫描操作里。6.3 XML 数据类型实战用OPENXML解析 Web 服务传入的订单 XMLSQL 2000 的 XML 支持虽原始但OPENXML是处理外部 XML 的利器。以下示例解析一段订单 XML并插入orders表-- 示例 XML存于变量中 DECLARE xmlDoc INTEGER DECLARE xmlString VARCHAR(1000) SET xmlString ROOT ORDER customer_name赵六 amount300.00/ ORDER customer_name钱七 amount400.50/ /ROOT -- 步骤1准备 XML 文档 EXEC sp_xml_preparedocument xmlDoc OUTPUT, xmlString -- 步骤2用 OPENXML 插入数据 INSERT INTO orders (customer_name, amount) SELECT customer_name, CAST(amount AS DECIMAL(10,2)) FROM OPENXML(xmlDoc, /ROOT/ORDER, 2) WITH ( customer_name VARCHAR(50) customer_name, amount VARCHAR(20) amount ) -- 步骤3释放 XML 文档 EXEC sp_xml_removedocument xmlDoc -- 验证 SELECT * FROM orders WHERE customer_name IN (赵六, 钱七)参数说明sp_xml_preparedocument将 XML 字符串加载到内存返回句柄xmlDocOPENXML(..., 2)2表示ATTRIBUTE-centric mapping按属性映射customer_name表示取customer_name属性值sp_xml_removedocument必须调用否则内存泄漏SQL 2000 无 GC。玄学提示OPENXML对 XML本文还有配套的精品资源点击获取
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表