Microsoft SQL Server 2016 - SSMS,无法扩展数据库的表

时间:2017-01-25 10:22:54

标签: sql-server ssms

我的服务器上有很多数据库,最近有一个数据库(我是dbo)已经无法通过SSMS访问。当我在' object explorer'中展开表节点时对于此数据库,我收到以下错误:

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。 (.Net SqlClient数据提供程序)

但是,我可以在该数据库上成功执行选择,而其他用户没有遇到此问题。

我有;

  1. 检查我的登录信息是否设置错误。
  2. 检查我的用户是否设置了错误。
  3. 重新启动SQL Server引擎。
  4. 使用安装程序实用程序修复SSMS。
  5. 非常感谢你的意见,我很难过(以前从未发生过这种情况)。

    编辑:使用SQL事件探查器跟踪并导致此事件后,我解压缩查询并在SSMS会话窗口中运行它。返回的结果来自错误的数据库。

    编辑:除此之外,我运行了dbcc checkdb(databasename)并且没有返回任何错误,然后我为master做了同样的事情,没有返回任何错误。

    编辑:扩展表文件夹时执行的查询:

        exec sp_executesql N'SELECT
    tbl.name AS [Name],
    SCHEMA_NAME(tbl.schema_id) AS [Schema],
    ''Server[@Name='' + quotename(CAST(
            serverproperty(N''Servername'')
           AS sysname),'''''''') + '']'' + ''/Database[@Name='' + quotename(db_name(),'''''''') + '']'' + ''/Table[@Name='' + quotename(tbl.name,'''''''') + '' and @Schema='' + quotename(SCHEMA_NAME(tbl.schema_id),'''''''') + '']'' AS [Urn],
    tbl.create_date AS [CreateDate],
    CAST(tbl.is_memory_optimized AS bit) AS [IsMemoryOptimized],
    CAST(CASE idx.type WHEN 5 THEN 1 ELSE 0 END AS bit) AS [HasClusteredColumnStoreIndex],
    CAST(tbl.is_remote_data_archive_enabled AS bit) AS [RemoteDataArchiveEnabled],
    tbl.temporal_type AS [TemporalType],
    CAST(CASE WHEN ''PS''=dsidx.type THEN 1 ELSE 0 END AS bit) AS [IsPartitioned],
    CAST(
            ISNULL((SELECT 1 from sys.all_columns
                    WHERE object_id = tbl.object_id 
                    AND is_sparse = 1), 0)
           AS bit) AS [HasSparseColumn]
    FROM
    sys.tables AS tbl
    LEFT OUTER JOIN sys.periods as periods ON periods.object_id = tbl.object_id
    LEFT OUTER JOIN sys.tables as historyTable ON historyTable.object_id = tbl.history_table_id
    INNER JOIN sys.indexes AS idx ON 
            idx.object_id = tbl.object_id and (idx.index_id < @_msparam_0  or (tbl.is_memory_optimized = 1 and idx.index_id = (select min(index_id) from sys.indexes where object_id = tbl.object_id)))
    
    LEFT OUTER JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = idx.data_space_id
    WHERE
    (CAST(
     case 
        when tbl.is_ms_shipped = 1 then 1
        when (
            select 
                major_id 
            from 
                sys.extended_properties 
            where 
                major_id = tbl.object_id and 
                minor_id = 0 and 
                class = 1 and 
                name = N''microsoft_database_tools_support'') 
            is not null then 1
        else 0
    end          
                 AS bit)=@_msparam_1 and tbl.is_filetable=@_msparam_2 and CAST(tbl.is_memory_optimized AS bit)=@_msparam_3 and tbl.temporal_type=@_msparam_4 and CAST(tbl.is_external AS bit)=@_msparam_5)
    ORDER BY
    [Schema] ASC,[Name] ASC',N'@_msparam_0 nvarchar(4000),@_msparam_1 nvarchar(4000),@_msparam_2 nvarchar(4000),@_msparam_3 nvarchar(4000),@_msparam_4 nvarchar(4000),@_msparam_5 nvarchar(4000)',@_msparam_0=N'2',@_msparam_1=N'0',@_msparam_2=N'0',@_msparam_3=N'0',@_msparam_4=N'0',@_msparam_5=N'0'
    

    编辑:作为解决方法,我重新安装了SSMS 2014.我可以通过此处访问我的表格。

2 个答案:

答案 0 :(得分:2)

您的数据库没有任何问题, SSMS 16.5.2 已知问题,并已向产品团队报告过。如果它导致太多麻烦,请恢复到之前发布的SSMS。有关详细信息,请参阅此thread

显然,这仅在数据库具有多个稀疏列的表时才会发生。

答案 1 :(得分:0)

试试吧

SELECT 
    NAME
FROM [base].SYS.triggerS
WHERE parent_class_desc = 'DATABASE'

获取触发器名称并执行以下步骤

DISABLE TRIGGER [dbo].[trigger_name]