SSMS v17.6需用完整表路径问题:原因及恢复设置方法
问题原因与解决方法
这问题我碰到过好多次,核心原因几乎都是SSMS会话的默认数据库/架构上下文变了,而你的VB代码因为连接字符串里明确指定了默认库,所以不受影响。咱们一步步拆解:
核心原因分析
- 默认数据库切换:昨天你连接SSMS时,默认数据库是
myDbName,直接写select * from MyTable会自动在这个库里找表;今天可能因为连接时选错了默认库(比如切到了master),或者登录账号的默认数据库被修改,导致当前会话默认去其他库找表——如果那个库刚好有个同名空表,就会出现“返回表头但无数据”的情况,智能提示也会因为上下文不对而失效。 - 默认架构变更(次要可能):如果你的登录账号默认架构从
dbo改成了其他值,即使在正确的数据库里,也需要指定dbo.MyTable才能找到目标表;不过结合VB代码正常的情况,这个可能性比默认数据库切换要小。
快速恢复步骤
临时修复当前会话
先执行这条语句确认当前默认数据库:
SELECT DB_NAME() AS CurrentDefaultDatabase;
如果返回的不是myDbName,执行下面的语句切换到目标库,之后短语句和智能提示会立刻恢复正常:
USE myDbName; -- 现在再执行就正常了 select * from MyTable;
永久修复(避免下次再出现)
修改登录账号的默认数据库:
- 在SSMS左侧对象资源管理器中,展开「安全性」->「登录名」,找到你正在使用的登录账号;
- 右键选择「属性」,在弹出窗口中找到「默认数据库」,选择
myDbName后点击确定保存。
检查并修复默认架构(可选):
如果确认默认数据库没问题,但还是需要指定dbo,可以执行这条语句查看当前用户的默认架构:SELECT USER_NAME() AS CurrentUser, DEFAULT_SCHEMA_NAME FROM sys.database_principals WHERE NAME = USER_NAME();如果返回的默认架构不是
dbo,执行下面的语句修改:ALTER USER [你的用户名] WITH DEFAULT_SCHEMA = dbo;连接时确认默认库:
下次打开SSMS连接服务器时,点击「选项」->「连接属性」,确认「默认数据库」选择的是myDbName,再点击连接。
为什么VB代码不受影响?
因为你的VB代码连接字符串里,大概率明确指定了Initial Catalog=myDbName(或者Database=myDbName)参数,每次VB程序连接数据库时,都会自动将默认数据库设置为myDbName,和SSMS的会话上下文无关,因此短语句依然有效。
内容的提问来源于stack exchange,提问作者Trip Ives
相关产品推荐
相关产品推荐

