sql server执行存储过程错误,错误提示消息 207,级别 16,状态 1,第 1 行 列名 'FG1307' 无效。

CREATE PROC PROC_FHSK
@ContractNo varchar(20)
as
......
declare @ContractNoWhere varchar(200)
if @ContractNo='' or @ContractNo is null
set @ContractNoWhere=' 1=1 '
else
set @ContractNoWhere= '合同名称='+@ContractNo
declare @sql varchar(2000)
set @sql='select * from #temp1 where '+@ContractNoWhere+' order by 客户名称,合同名称,产品代码'
exec(@sql)
drop table #temp1
存储过程是上面这么建立的,“......”表示省略了创建临时表#temp1及向#temp1插入数据的语句。
当执行时:EXEC PROC_FHSK 'FG1307'
提示:消息 207,级别 16,状态 1,第 1 行
列名 'FG1307' 无效。
我的猜测是按照select * from #temp1 where 合同名称=FG1307 order by 客户名称,合同名称,产品代码执行了,由于合同名称是VARCHAR,正确查询语句应为select * from #temp1 where 合同名称='FG1307’ order by 客户名称,合同名称,产品代码,由于sql server基本都是自学,这里就不知道如何修改了,还望高手指点指点。献上100财富值不成敬意。

你这行'合同名称='+@ContractNo ,ContractNo 为传进来的参数, 因为字符串拼接后,单引号没有了,导致数据库把把解析为了变量(表的一列),因为数据库没有该列,所以报错了。

你这样写试试:
set @ContractNoWhere= '合同名称=‘’‘+@ContractNo+’‘’‘

不行在M我,一大早我也没清晰
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-18

set @ContractNoWhere= '合同名称='+@ContractNo

改为

set @ContractNoWhere= '合同名称='''+@ContractNo+''''

即可

本回答被提问者采纳

Warning: Invalid argument supplied for foreach() in /www/wwwroot/aolonic.com/skin/templets/default/contents.html on line 45
相似回答