none
如何修改、删除sysobjects表中的记录 RRS feed

  • 问题

  • 动态的创建视图vwTable,在每次创建前先通过sysobjects表中判断改视图是否存在,如果存在先drop,然后在Create,目前视图vwTable已经drop掉了,但是在sysobjects中还有相关的记录。问:这种情况是怎样产生的,在Sql Server 2005\2008中,如何修改、删除sysobjects表中的记录
    2010年5月18日 2:04

答案

  • 建议你检查你的 方法 ExecuteSQL(gstrConnection, strtmp)

    执行你的那个sql的时候 估计永远返回的是 false。你这个drop操作如何判断是否执行成功?

    建议分开2个步骤写,一个判断,一个执行删除。


    family as water
    2010年5月18日 12:15
  • 检查一下创建时间, 看看是不是程序并发调用产生的(在你删除之后, 创建之前, 另一个进程先创建了)
    2010年5月19日 4:41

全部回复

  • Can you post your sql code? Can't update system tables in sql2k5/8 by the way.
    2010年5月18日 2:42
  • 既然不能修改,遇到这样的问题怎么处理比较合适呢?感谢!

    2010年5月18日 4:48
  • 能提供重现此现象的方法吗?

    2010年5月18日 4:49
  • strtmp = "if exists(select * from dbo.sysobjects where name = '" & strView & "') drop view dbo." & strView
        If ExecuteSQL(gstrConnection, strtmp) = False Then GoTo Err
        '建立视图
        strtmp = "CREATE VIEW dbo." & strView & "  as " & strSQL
        If ExecuteSQL(gstrConnection, strtmp) = False Then GoTo Err

    其中strView是视图名称,strSQL是创建视图的语句。

    2010年5月18日 9:07
  • 建议你检查你的 方法 ExecuteSQL(gstrConnection, strtmp)

    执行你的那个sql的时候 估计永远返回的是 false。你这个drop操作如何判断是否执行成功?

    建议分开2个步骤写,一个判断,一个执行删除。


    family as water
    2010年5月18日 12:15
  • 绝大数正常情况上面代码是可以成功的,但不知道什么时候就出现了这种情况。现在主要是想办法在sysobject表里面删除掉这条记录。
    2010年5月19日 0:59
  • 先检查?

    或者换其他视图测试一下?

    sysobjects的记录对应的视图没有了么?检查一下确认一下。

     


    family as water
    2010年5月19日 1:50
  • 检查一下创建时间, 看看是不是程序并发调用产生的(在你删除之后, 创建之前, 另一个进程先创建了)
    2010年5月19日 4:41