这是最简单的repro案例.
失败,显示此错误消息.
消息文字:
标题:Microsoft SQL Server Management Studio
无法检索此请求的数据.(Microsoft.SqlServer.Management.Sdk.Sfc)
如需帮助,请单击:链接
附加信息:
执行Transact-SQL语句或批处理时发生异常.(Microsoft.SqlServer.ConnectionInfo)
对象'extended_properties',数据库mssqlsystemresource',schema'sys'拒绝SELECT权限.(Microsoft SQL Server,错误:229)
如需帮助,请单击:链接
该用户可以访问表和表中的记录.但是用户无法访问对象资源管理器中的表列表.
SELECT USER_NAME() AS CurrentUser, col1
FROM dbo.TestTable
CurrentUser col1
----------- ----
robg_test 1000
Run Code Online (Sandbox Code Playgroud)
我发现的唯一解决方法是为用户提供高于必要的权限(如db_datareader).
允许此用户在对象资源管理器中打开表列表所需的最低权限是多少?
我曾尝试授予用户dbo架构的各种权限,但这没有帮助.
另请注意,我使用SQL用户只是为了说明问题.最初的问题出在AD用户身上.
这是serverfault中一个相对类似的问题.
SET NOCOUNT ON
USE master
GO
IF EXISTS (SELECT * FROM sys.server_principals WHERE name = N'robg_test')
DROP LOGIN [robg_test]
GO
CREATE LOGIN [robg_test]
WITH …Run Code Online (Sandbox Code Playgroud) 为了尝试为这个问题构建示例代码,我遇到了一个问题CONTEXT_INFO().
我正在做的是将int转换为varbinary(128),以便我可以将其传递给SET CONTEXT_INFO.我可以在执行SET之前将varbinary转换回int,但在I SET然后GET之后,即使varbinary值明显不为零,CONVERT也总是返回零.
二进制不是我的强项,所以我可能会错过一些简单的东西.
SET NOCOUNT ON
USE tempdb
GO
DECLARE @number int
DECLARE @ContextInfo varbinary(128)
SET @number = 16777216
SET @ContextInfo = CONVERT(varbinary(128), @number)
SELECT @number AS [@number]
SELECT @ContextInfo AS [@ContextInfo]
SELECT CONVERT(int, @ContextInfo) AS [CONVERT(int, @ContextInfo)]
SET CONTEXT_INFO @ContextInfo
GO
SELECT CONTEXT_INFO() AS [CONTEXT_INFO()]
SELECT CONVERT(int, CONTEXT_INFO()) AS [CONVERT(int, CONTEXT_INFO()) (Zero)]
GO
DECLARE @ContextInfo varbinary(128)
SET @ContextInfo = CONTEXT_INFO()
SELECT @ContextInfo AS [@ContextInfo]
SELECT CONVERT(int, @ContextInfo) AS [CONVERT(int, @ContextInfo) …Run Code Online (Sandbox Code Playgroud) 在回答这个问题时,KM说
如果您在SQL Server 2005之上或之上,您可以使用IF在同一过程中拥有多个查询,并且每个查询都会为其保存一个查询计划(相当于旧版本中的每个查询计划),请参阅我的答案中的文章或链接到适当的部分:sommarskog.se/dyn-search-2005.html#IF
HLGEM补充道
您也可以在早期版本的SQL Server中执行此操作.
我读了Sommarskog的优秀文章,但没有看到任何有关多个计划的内容.
在以后的研究中,我读报价这里自Gert德雷珀斯:
因为SQL Server每个存储过程只允许一个执行计划...
我不知道原始文章的日期或他所指的SQL Server版本.
有没有人有一个可靠的参考资料来讨论这个,或者更好的是,一个证明这是真的测试?