更改数据库名称时 存储过程的数据库名称如何改变

在 SQL Server 中,当你更改数据库名称时,存储过程中的 USE [big_data] 语句不会自动更改。你需要手动更新所有引用旧数据库名称的存储过程。

若要修改存储过程中的数据库引用,可以按照以下步骤操作:

  1. 首先,使用 ALTER DATABASE 语句更改数据库名称:
  2. ALTER DATABASE big_data MODIFY NAME = big_data_test;
  1. 然后,找出所有引用旧数据库名称(big_data)的存储过程,并使用 sp_rename 或直接编辑存储过程内容来更新 USE 语句:
复制代码
   sql
   -- 查找引用 big_data 的存储过程
   SELECT DISTINCT so.name 
   FROM sys.sql_modules sm 
   JOIN sys.objects so ON sm.object_id = so.object_id
   WHERE sm.definition LIKE N'%big_data%';

   -- 更新存储过程
   DECLARE @SQL NVARCHAR(MAX);
   SELECT @SQL = STRING_AGG('ALTER PROCEDURE ' + QUOTENAME(SCHEMA_NAME(so.schema_id)) + '.' + QUOTENAME(so.name) + CHAR(13) + CHAR(10) 
       + 'AS' + CHAR(13) + CHAR(10) 
       + REPLACE(sm.definition, 'USE [big_data]', 'USE [big_data_test]', 1), CHAR(13) + CHAR(10) + ';')
   FROM sys.sql_modules sm 
   JOIN sys.objects so ON sm.object_id = so.object_id
   WHERE sm.definition LIKE N'%big_data%';
   EXEC sp_executesql @SQL;

注意:上述示例使用了 SQL Server 2017 及更高版本支持的 STRING_AGG 函数。如果你使用的是较早版本的 SQL Server,可能需要采用其他方法(如使用 CURSOR 或 WHILE 循环)来逐个更新存储过程。

请根据实际情况调整代码,并在执行前备份数据库和相关对象,以防万一。

相关推荐
吠品10 分钟前
PG_GBK 与 PG_UTF8 编码冲突:一次数据导入踩坑复盘
数据库
lld95102717 分钟前
我做了一个 AI Agent Skill 云:用 MCP 在 Claude Code、Codex、OpenCode 之间同步技能
数据库·人工智能
辉灰笔记1 小时前
MySQL8 意外关机/误移data目录导致服务启动失败 PID报错/权限报错 修复文档
linux·数据库·mysql·centos
麦聪聊数据2 小时前
电商大促数据库管控(下):数据需求小时级交付与全链路安全管控
数据库
喜欢的名字被抢了2 小时前
MySQL核心机制:事务、锁与存储引擎
数据库·sql·mysql·教程
JosieBook3 小时前
【数据库】时序数据库通过国测认证,TimechoAI开放体验:工业数据的“存”与“智”如何协同?
数据库·时序数据库
卓怡学长3 小时前
w263基于springboot + vue 健康饮食管理系统
java·数据库·vue.js·spring boot·spring·intellij-idea
阿演5 小时前
DataDjinn v0.2.11:SQL 编辑、AI 协作和表格操作继续打磨
数据库·人工智能·sql
不坑老师6 小时前
Excel总表如何按班级拆分并分别发送?
前端·数据库·人工智能·excel·ppt·office
智脑API平台6 小时前
Codex 国内使用会封号吗?账号安全、中转站和合规边界说明
数据库·redis·缓存