在原有的表中新增加了一列,但是在存储过程中却不能识别这个列,是怎么回事。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在原有的表中新增加了一列,但是在存储过程中却不能识别这个列,是怎么回事。相关的知识,希望对你有一定的参考价值。
以前存在一个存储过程,可以更新表中的一些字段。现在我在原来的表中新加了一列,想在原来的存储过程中,也更新这个列的数据,可是,存储过程中总是提示这个列无效,就是无法识别这个列。不知道是怎么回事,是在表中设置新增加的列的属性才能让存储过程识别,还是在存储过程中做某些设置可以识别到这个新增加的列?sqlserver2012,希望各位高手帮忙解决一下。。
代码如下:
begin update GSP_PTYPZKYH_HZ set is_zx = '是' from GSP_PTYPZKYH_HZ a inner join tmp_bill_GSP_KFYH_ZYZKYH_dssub1 b on a.djbh = b.djbh and b.GZID = @gzid if @@error<>0 or @@rowcount = 0 begin set @return=2 goto err_lab end
提示is_zx列名无效。
跟那些没关啊,,,
你先验证下吧,,,
首先
select top 1 is_zx from GSP_PTYPZKYH_HZ这样,看能查吗,如果能,说明字段加上了,就说明是你的过程的问题;
如果上面没问题,把这段再改下试试
update a set a.is_zx = '是'from GSP_PTYPZKYH_HZ a inner join tmp_bill_GSP_KFYH_ZYZKYH_dssub1 b追问
现在是这个状态 :虽然查询没有什么问题,但是依然显示列明无效。晕了!
改成我那个更新语句试试
追问还是同样的问题,提示列明无效,但是直接在数据库中执行这个存储过程,可以正常执行。
追答直接在数据库中执行这个存储过程,可以正常执行。什么意思?
你不是不能alter 那个过程,提示字段无效吗,怎么又能执行了
就向上个图一样,虽然提示这个列明无效,但是查询语句依然可以正常的执行。直接执行存储过程也可以正常的执行,但是我程序调用这个存储过程的时候还是会出错。
追答你的意思是你在数据库里已经没问题了,在程序调用数据库过程的时候会报错?
参考技术B 提示这个列无效,不一定是不能识别这个列。可能是其它的一些语法错误
你可以简单的自己写个存储过程或者sql语句测试一下。 参考技术C 我也遇到这个问题了 解决了吗? 通过plsql中通过编辑表 新增的四个列 在存储过程里编译时提示无效,拿出来在sql窗口中直接执行就没问题,只有在存储过程中不行
如何在sql数据库表里加入新的一列(表里原有数据)
先修改表,允许之前各列可以为空,再去删掉了原数据。但在添加完一列后提示不能保存,跳出了这个
求高手看看那
因为userid字段限定为不可为空,插入空数据,造成报错。
在数据库表中,查询新列的sql示例如下,
1、创建测试表,create table test_num(id number, fee number(10,3));
2、查看表的属性,共包含两列,ID、FEE,
3、执行sql语句,插入新字段,alter table test_num add (fee2 number(10,3));
4、重新查看表结构,字段已加上,
参考技术A1、首先在桌面双击“SQL Server 2008R2”的图标,点击进入它的管理界面,如下图所示。
2、在里面找到“数据库”菜单,右键这个选项,找到“附加数据库”,点击这个选项,如图所示。
3、来到“附加数据库”的界面,点击“添加”按钮,即可跳转到本地电脑里面的文件选择项,如图所示。
4、然后在自己的本地电脑里面找到刚刚需要附加的数据库文件,找到“.mdf”文件,点击附加。
5、这时新的数据就附加到我数据库里面了。
参考技术B 不需要删除原有数据,直接alter table 表名 add 列名 数据类型 参考技术C 用SQL语句试一下。
alter table tmp_tb_user add Userid int
类似这样的语句,你根据实际情况修改一下。 参考技术D 你新添加的那列userid才是真正应该设置为可空的,但是你怎么不勾呢?追问
后来我勾了,但是写数据进去又报错了
是这样的,在编辑模式下sqlserver不允许有两行相同,你先按ESC取消了,然后删除所有行,如果删不掉就用delete语句删除,然后再一行一行地填,注意决不能有两行数据完全一致!
本回答被提问者采纳以上是关于在原有的表中新增加了一列,但是在存储过程中却不能识别这个列,是怎么回事。的主要内容,如果未能解决你的问题,请参考以下文章