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

标签 sql-server stored-procedures

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

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

首先有一个这样的查询。

选择a.a , b.b , a.b FROM 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/

相关文章:

sql-server - 如何在 Entity Framework 中获取存储过程@@ ERROR值?

python - python中使用cursor.callproc()调用MySQL存储过程

sql - 内连接中的子查询

sql-server - SQL Server 中的 'BETWEEN' 函数是否非常昂贵?

sql - 忽略特定列中的相同值

java - 如何用JDBC调用PostgreSQL存储过程

sql - T-SQL 存储过程从计数器多次获取相同的值

entity-framework - Entity Framework 3.5 和存储过程结果映射

sql-server - 在 SQL Server 中更改列 varchar(255) nvarchar

sql - 如何使用 Sql Server XQuery 搜索不区分大小写的单词?