|
|
1
2
这不是一个很好的答案,但这里…
为了调试这个,我将在SSMS中加载完整的查询,并添加
基本上,只需开始删除功能不需要的内容,因为这些内容会出现故障。删除一些DDL语句,测试运行并在运行过程中回滚事务,直到事务运行无误为止。当它毫无错误地运行时,很可能是您删除的最后一块代码导致了您的问题。 如果您要删除多个DDL语句(我会这样做),那么此时您可以获得更详细的内容。我的意思是,删除一堆你的函数不依赖的东西,然后运行整个查询。如果可以,回滚,将该块添加回(undo/ctrl z),然后更细化地删除较小的块,一次删除一个,直到删除单个语句为止。 像搜索一样对待它。当删除单个DDL语句使查询正常工作时,您发现了罪魁祸首。你只要找到那句话就行了。 有了足够的来回性,您应该能够识别出导致您的问题的代码块,希望是单个DDL语句。如果这段代码为什么会让你感到悲伤还不是很明显,那么把它贴在这里或者贴在一个新的问题上,希望其他人能比我更有帮助。 |
|
|
2
1
用户5151179发布的调试方法非常有用。
此问题是由包含在问题函数(即 不 本机编译,不引用任何本机编译的模块)。 我还是不知道 为什么 这种情况会发生,但将几十个本机编译的函数移动到脚本中的另一个“位置”(更接近底部,最重要的是 之后 创建问题函数)完全解决了问题,而不修改任何函数或过程。 数据库中的每个对象都与以前完全相同,只是创建顺序不同。 这让我很困惑,因为在这些对象之间没有任何引用,这将要求按特定的顺序创建它们——而错误本身只是一个数据类型错误,对于位于脚本顶部的UDTT来说,它实际上是在数据库中任何其他对象之前创建的。 如果有人知道为什么SQL Server如此挑剔 什么时候? 创建本机遵从的功能和过程,您可以随意留下评论或发布其他答案。 |