我把一个库的存储过程导出成SQL语句,然后在查询分析器中执行生成到另一个库上,可是
由于创建顺序的问题,有些SP会有一些warning message:
Cannot add rows to sysdepends for the current stored procedure because it depends on the missing object 'usp_GetReplyToBy'. The stored procedure will still be created.我的问题是, 当我创建完所有SP后,如何自动给这些SP,加上sysdepends(依赖关系).其实只要重新编译一下,所有刚创建的SP就行,但不知有什么方法能实现.

解决方案 »

  1.   

    to 楼上的
    这个我知道,但你右键它的名字->display depends(查看依赖对象的时候,会不正确的)!
      

  2.   

    引用对象
    SQL Server 允许创建的存储过程引用尚不存在的表。在创建时,只进行语法检查。执行时,如果高速缓存中尚无有效的计划,则编译存储过程以生成执行计划。只有在编译过程中才解析存储过程中引用的所有对象。因此,如果语法正确的存储过程引用了不存在的表,则仍可以成功创建,但如果引用的表不存在,存储过程在运行时将失败。有关更多信息,请参见延迟名称解析和编译。 延迟名称解析和兼容级别
    SQL Server 允许 Transact-SQL 存储过程在创建时引用不存在的表。这种能力称为延迟名称解析。如果引用的表或列不存在,则在运行时返回错误消息。如果 Transact-SQL 存储过程引用了该存储过程中定义的表,而兼容级别设置(通过执行 sp_dbcmptlevel 来设置)为 65,则在创建时会发出警告信息。有关更多信息,请参见 sp_dbcmptlevel 和延迟名称解析和编译。
      

  3.   

    延迟名称解析和编译
      新增信息 - 2001 年 9 月创建存储过程时,要分析该过程中的语句以检查语法的准确性。如果在过程定义中遇到语法错误,将返回错误,并且将不创建该存储过程。如果语句的语法正确,则存储过程的文本将存储在 syscomments 系统表中。当首次执行存储过程时,查询处理器从该过程的 syscomments 系统表中读取该存储过程的文本,并检查该过程所使用的对象名称是否存在。这一过程称为延迟名称解析,因为存储过程引用的表对象不需要在创建该存储过程时就存在,而只需在执行该存储过程时存在。说明  只有引用的表对象不存在时才使用延迟名称解析。所有其他对象在创建所存储的过程时必须存在。例如,引用所存储的过程中的一个现有表时,不能列出该表不存在的列。在解析阶段,Microsoft® SQL Server™ 2000 还执行其它验证活动(例如,检查列数据类型与变量的兼容性)。如果执行存储过程时存储过程所引用的对象丢失,则存储过程在到达引用丢失对象的语句时将停止执行。在这种情况下,或在解析阶段发现其它错误时,将返回错误信息。说明  如果删除或重命名了存储过程所引用的对象,则在执行该存储过程时会返回错误。但如果用同名的对象替换了存储过程中引用的对象,那么无须重新编译即可执行该存储过程。例如,如果存储过程 proc1 引用了表 test1,而 test1 被删除,并创建了名为 test1 的另一个表,那么 proc1 将引用该新表。不必重新编译该存储过程。
    如果过程执行顺利通过解析阶段,则 SQL Server 中的查询优化器将分析该存储过程中的 Transact-SQL 语句,并创建一个执行计划。执行计划描述执行存储过程的最快方法,所依据的信息包括: 表中的数据量。
    表中是否存在索引及索引的性质,以及数据在索引列中的分布。
    WHERE 子句条件所用的比较运算符和比较值。
    是否存在联接以及 UNION、GROUP BY 和 ORDER BY 关键字。 
    查询优化器在分析完存储过程中的这些因素后,将执行计划置于内存中。分析存储过程和创建执行计划的过程称为编译。优化的内存中的执行计划将用来执行该查询。执行计划将驻留在内存中,直到重新启动 SQL Server 或需要空间以存储另一个对象时为止。在随后执行存储过程时,如果现有的执行计划仍在内存中,则 SQL Server 将再次使用它。如果执行计划不再位于内存中,则创建新的执行计划。有关更多信息,请参见存储过程和触发器执行。
      

  4.   

    用sp_recompile,强制重新编译
      

  5.   

    sp_recompile 是可以重新编译,我以为能解决我的问题,但当我执行完后,再次 Display Dependency 时,仍然看不到SP的相关对象的信息. 如果我进入随便编辑一下,然后保存,这样就没问题
      

  6.   

    sp_recompile
    使存储过程和触发器在下次运行时重新编译。之所以还需要楼主逐个存储过程执行一遍