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

CREATEPROCPROC_FHSK@ContractNovarchar(20)as......declare@ContractNoWherevarchar(200)i... 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财富值不成敬意。
展开
 我来答
童声远霍
2013-07-18
知道答主
回答量:8
采纳率:0%
帮助的人:3.5万
展开全部
你这行'合同名称='+@ContractNo ,ContractNo 为传进来的参数, 因为字符串拼接后,单引号没有了,导致数据库把把解析为了变量(表的一列),因为数据库没有该列,所以报错了。

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

不行在M我,一大早我也没清晰
WHITE_WIN
2013-07-18 · TA获得超过6111个赞
知道大有可为答主
回答量:3759
采纳率:50%
帮助的人:1999万
展开全部

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

改为

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

即可

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式