gpt4 book ai didi

sql-server - 已保存损坏的存储过程

转载 作者:行者123 更新时间:2023-12-02 23:29:28 28 4
gpt4 key购买 nike

我今天收到一张票,涉及因存储过程损坏而导致的应用程序损坏。

该存储过程已经运行了几个月,但是今天当我检查它时,发现了一些错误。

首先有一个这样的查询。

选择a.a , b.b , a.bFROM table1 一个 JOIN 表2b 在。 a.a = b.a

“ON”之后的句点显然导致了错误。修复它很容易,但据我所知,您无法保存存储过程那已经坏了。事实上,当我打开存储过程时,(没有修改它)并尝试使用那里的代码运行更改,但失败并显示错误消息。

通过我修复的存储过程还存在其他类似错误,以最终运行更改。

我不明白这是怎么可能的,并且想知道什么可以更改并保存损坏的存储过程。据我所知,服务器根本没有任何变化,就像我之前提到的,这个存储过程在过去的几个月里一直在工作

感觉就像我在追捕幽灵,任何信息将不胜感激。

最佳答案

我猜测这是延迟名称解析的问题。

SQL Server 将允许您创建引用在创建存储过程时不存在的对象的过程。在这种情况下,SQL 选择将查询的编译推迟到运行时,相信在调用过程时该对象将存在,因此在创建过程时不会验证语法。
如果随后执行该过程时语法不正确,您将在此时收到错误消息,但在过程创建期间不会收到错误消息。

例如,如果 table1 和 table2 不存在,则此语句将完成且不会出现错误:

CREATE PROCEDURE testproc AS
SELECT a.a
, b.b
, a.b
FROM table1 a
JOIN table2 b ON. a.a = b.a

当你去执行testproc时,你会得到以下错误:“无法绑定(bind)多部分标识符“.a.a”。”

关于sql-server - 已保存损坏的存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526611/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com