Far*_*han 4 sql-server ssms intellisense sql-server-2016
我正在使用 SSMS 2016(版本:13.0.15000.23)并连接到 SQL Server 数据库 2016(版本:13.0.5081.1)。
IntelliSense 不适用于我的 SSMS。
我尝试了以下方法:
我询问了我团队中的其他成员,如果确实如此,IntelliSense 只能偶尔为他们工作。
问题:
是否有在 SSMS 上禁用 IntelliSense 的服务器设置?
我已经完成了所有这些问题:
我对该实例的权限有限,但我可以选择和更新我正在使用的数据库中的记录(我没有尝试插入)。通过运行,我可以看到大约 1,600 个对象和列的名称:
SELECT o.name, c.name
FROM sys.objects o
INNER JOIN sys.columns c ON o.object_id = c.object_id
WHERE o.is_ms_shipped = 0;
Run Code Online (Sandbox Code Playgroud)
Jos*_*ell 10
正如您目前收到的评论答案所暗示的那样,此问题最可能的原因是您没有对该数据库的适当权限。这是(相当模糊)记录在这里:
IntelliSense 故障排除 -> 数据库引擎查询 IntelliSense
- 完成列表不包括您没有权限的数据库对象。IntelliSense 标记对您有权限的对象的引用。例如,如果您打开由其他人编写的脚本,则对该人具有权限而您没有访问的对象的任何引用都将被标记为不正确。
解决此问题的最简单方法是让 DBA 向您用于连接到此数据库的数据库用户授予“查看定义”权限。
例如,我可以在本地 SQL Server 2016 实例上创建此登录名和特定数据库的数据库用户:
USE [master]
GO
CREATE LOGIN [nerd-login] WITH PASSWORD = 'NerdPassword1';
USE [SomeDatabase]
GO
CREATE USER [nerd-user] FOR LOGIN [nerd-login] WITH DEFAULT_SCHEMA=[dbo]
GO
Run Code Online (Sandbox Code Playgroud)
如果我以 nerd-login 登录,我可以连接到SomeDatabase
数据库,但我无法获得任何智能感知。但是,在运行此命令后:
USE [SomeDatabase]
GO
GRANT VIEW DEFINITION TO [nerd-user];
Run Code Online (Sandbox Code Playgroud)
我能够在SomeDatabase
数据库中的对象上获得智能感知。
这也可以在实例级别(通过GRANT VIEW ANY DEFINITION
在master
数据库上下文中执行)或在每个对象级别更广泛地授予。
在这里的评论中,您提到了:
服务器距离大约 50 英里,但我确实觉得网络/计算机存在一些问题,因为打开新浏览器需要几秒钟。
特定数据库中的元数据量(表、视图、列、函数、存储过程等的数量)、您与数据库之间的网络速度以及其他数据库的繁忙程度等因素都会影响智能感知。
这是 Aaron Bertrand 的博客文章中对延迟问题的非常彻底的处理:
SQL Server Management Studio 2012 中的 IntelliSense 疑难解答
最后,您可能只需要耐心等待。检查您的网络速度、服务器的总体健康状况,并了解您的元数据是否非常大 - 例如,如果您正在运行 SAP,则需要传输的数据比 AdventureWorks 多得多。
当 SSMS 尝试从目标服务器获取元数据时,它可能会在开始接收结果之前超时。此超时在 SSMS 2012 中硬编码为两秒,但在以前的版本中,它会等待数据库连接超时(可能是 30 秒或更长时间)。它将在后台继续尝试,因此您可能不会立即看到下拉菜单出现,但在连续尝试按 Ctrl+J 后它可能会出现。
您可以通过按 Ctrl+Shift+R 或菜单选项“编辑”>“智能感知”>“刷新本地缓存”来强制它尝试重新加载。一旦在后台检索到元数据,数据就会缓存在本地内存中。如果连接正常工作并且上述因素均不存在,则最终会填充缓存,您应该能够使用所有功能。
但同样,在 SSMS 2008 或 SSMS 2008 R2 上,由于更宽松的超时,这可能需要更长的时间。
注意:我意识到这是关于 SSMS 2012,但相同的一般原则仍然适用
归档时间: |
|
查看次数: |
1641 次 |
最近记录: |