Azure SQL托管实例重命名DB2后DB1视图仍可用的原因咨询
问题原因解析
SQL Server内部用ID而非名称解析对象引用:当你创建视图时,Azure SQL托管实例(基于SQL Server引擎)会把视图里引用的
DB2.dbo.目标表这类对象,解析为对应的内部标识符——包括数据库ID(database_id)、对象ID(object_id)等,而非直接存储字符串形式的数据库名称。重命名数据库只会修改它的name属性,不会改变内部的database_id,所以视图依然能通过ID找到目标表,正常执行查询。SSMS生成脚本读取的是原始创建文本:SSMS的“Script view As -> Alter To”功能,是从系统目录视图
sys.sql_modules里读取视图的原始创建语句文本。这个文本在数据库重命名后不会自动更新,所以生成的脚本里还是旧的DB2名称,但这只是显示的静态文本,不影响视图实际的执行逻辑。你可以通过以下查询验证:
- 查看视图的原始定义:
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('DB1.dbo.你的视图名');,能看到旧的数据库名称。 - 查看数据库的ID:
SELECT database_id, name FROM sys.databases WHERE name IN ('旧DB2名称', '新DB2名称');,会发现两者的database_id完全一致。
- 查看视图的原始定义:
内容的提问来源于stack exchange,提问作者Fettster777
相关产品推荐
相关产品推荐

