即使不执行该过程也不存在该列

时间:2019-11-14 00:28:32

标签: sql-server tsql

我有两个单独的程序。一种过程是使用新列更改现有表。另一个过程将数据添加到表中。它们不会被执行,只会被创建。当我点击运行时,将数据添加到列的过程将引发错误,指出该列不存在。我知道它不是创建的,因为我没有执行包含更改后的代码的过程。不确定为什么执行该过程中的代码,因为我认为它只能创建该过程。

一些代码是重复的,我理解。这只是在动态修改它之前获得可行的解决方案。

Alter Table procedure

enter image description here

2 个答案:

答案 0 :(得分:2)

要比我的评论更完整地回答此问题-已编译存储过程。因此,如果尝试执行无效的操作,则编译将失败。它不仅在运行时检查。

尝试此操作,每次都会失败:

create table junk(a int)

create procedure p as
update junk set b=1

答案 1 :(得分:1)

如果您希望这样做,请在尝试创建插入数据的过程之前运行创建列的过程,或者更改插入过程,以使其使用动态sql

请注意,如果您迫切需要一个没有列但有一个引用它们以进行插入的过程的数据库,则可以创建列,创建插入过程,然后再次删除列。该过程将不会运行,因为删除列会使该过程无效,但它仍然存在

不太清楚为什么要这么做-数据库模式在很大程度上是设计时的事,因此设计应该是可进化的。如果您是使用前端语言进行更广泛的工作的一部分,那么请看一下数据库迁移工具-这是一种运行脚本的设备,通常是在应用启动时运行,以确保db具有数据库中的所有列和数据。应用需要该版本才能运行。通常,它也是双向的,因此,如果您降级,则迁移者将/可以删除它添加的列和数据