2

正如标题已经说过的,我是否正在尝试使用SQLMetal创建一个 dbml 文件。此操作的背景是创建一个C#-Codefile,其中包含所有表、函数、视图、存储过程等,以便在MVC-Application中使用它。

现在来解决问题。当我从命令启动 SQLMetal 时,它需要很长时间,显示一些小警告并出现错误(DBML1057)。当我阅读错误消息时,SQLMetal 正在尝试提取一个不存在的存储过程。我查看了数据库十几次,但肯定找不到这样的程序。也许这个程序很久以前就被调用过。即您创建一个名为“ GetGameDatesDesc ”的SP,然后将其重命名为“ GetGameDates ”。我认为SQLMetal(在我的情况下)正在寻找“ GetGameDateDesc ”。但是 SQLMetal 的这些信息是从哪里来的呢?我在数据库中找不到单词。我查看了所有视图,功能,... bot 无济于事。此函数不再是数据库的一部分。

编辑 -------------- 02/14/2011 --------------

以下是来自 SQLMetal 的警告:

错误 DBML1042:Type 元素“GetGameDatesDesc”的 Column 元素中的成员属性“ CCode被使用。错误 DBML1057:类型“ GetGameDatesDesc ”的 Column 元素中的存储属性或其默认值“ _CCode ”已被使用。

4

2 回答 2

0

您的现有存储过程之一似乎存在一些错误。也许您删除或重命名了某个存储过程,但另一个存储过程仍然调用该删除或重命名的存储过程。尝试使用 SQL Management Studio 生成创建所有存储过程的 SQL 脚本(鼠标右键单击数据库 -> 任务 -> 生成脚本)并在生成的脚本存储过程名称中搜索会导致错误。

于 2011-02-13T18:51:17.840 回答
0

这是 SqlMetal 的一个不幸的限制。由于 SQL Server information_schema 对 SP 代码的限制为 4000 个字符,因此 SqlMetal 正在使用该sys.sql_modules视图来查找 SP。但是该sp_rename函数不会更新该视图,因此如果重命名 SP,SqlMetal 将无法正常工作。sp_rename 文档中的建议是删除并重新创建这些对象:

重命名存储过程、函数、视图或触发器不会更改 sys.sql_modules 目录视图的定义列中相应对象名称的名称。因此,我们建议不要使用 sp_rename 来重命名这些对象类型。相反,删除并使用新名称重新创建对象。

解决方案是删除该 SP 并重新创建它,因为 SQL Server 将使用 object_id 删除相应的sys.sql_modules行。

于 2011-02-13T18:58:34.993 回答