微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

你调用的对象是空的 (SqlMgmt) 同时使用 SSMS 向导更新扩展属性

如何解决你调用的对象是空的 (SqlMgmt) 同时使用 SSMS 向导更新扩展属性

更新时(单击“确定”按钮,或 SSMS 向导页面上的“脚本”), SSMS 收到错误:未将对象引用设置为对象的实例。 (sqlMgmt)

error on clicking!

Advance Information of error

虽然用系统过程(EXEC sys.sp_updateextendedproperty)做那个动作没有问题,而且会成功执行,但SSMS似乎无法在向导页面(存储过程属性)上生成这个动作。>

  • 我已经在本地系统上重新安装了 SSMS,但是没有用!

  • 在连接到此实例的我们的客户端和开发人员的每个本地系统上都存在相同的错误!我相信这是服务器实例范围内的问题,而不是客户端的 SSMS。

  • 从其他对象(如表、视图、函数等)更新扩展属性没有问题,但只是存储过程!

  • 我想 msdb 数据库上的某些系统表中可能有一些脏记录!!!

解决方法

我自己解决了! 问题是我的所有存储过程都有一个带有 NULL 值的扩展属性!!!

所以要解决这个问题,应该更新所有这些并为它们生成 Not NULL 值。

下面的示例代码将更新整个存储过程的所有值,这些值存在于其扩展属性中的 NULL 值(只需将 YOUR_EXTENDED_PROPERTY_NAME 替换为您自己的具有 NULL 值的扩展属性名称,应该更新):

DECLARE @Query AS NVARCHAR (MAX);
DECLARE c CURSOR FOR
----------------------------------------------------
SELECT 'begin try EXEC sys.sp_updateextendedproperty @name=''YOUR_EXTENDED_PROPERTY_NAME'',@value='''',@level0type=''SCHEMA'',@level0name='''
       + schemaName + ''',@level1type=N''PROCEDURE'',@level1name=N''' + spname + ''' End try Begin catch End catch'
FROM (
         SELECT Ob.name  spname,EX.name  extended_name,sch.name AS schemaName,EX.value
         FROM sys.extended_properties AS EX
         JOIN sys.objects             AS Ob ON Ob.object_id = EX.major_id
         JOIN sys.schemas             AS sch ON sch.schema_id = Ob.schema_id
         WHERE Ob.type = 'P'
               AND EX.value IS NULL
     ) t;

----------------------------------------------------
OPEN c;
FETCH NEXT FROM c
INTO @Query;
WHILE @@fetch_status <> -1
BEGIN
    EXECUTE sp_executesql @Query;
    FETCH NEXT FROM c
    INTO @Query;
END;
CLOSE c;
DEALLOCATE c;

问题是,为什么微软允许插入 NULL 值,然后在它们上面得到 ERROR Object reference not set to an instance of an object.!!!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。