简单而又古怪的存储过程问题(20分)

N

nzfsoft

Unregistered / Unconfirmed
GUEST, unregistred user!

/*用来返还所有记录中物品的种类(通过3个关键字的关联) */
/*输入参数:tabName 表的名称*/
CREATE PROCEDURE GoodsInfo
@MyTabName varchar(20) ,
@SiteCode smallint=0 /*条件字段
AS
declare @MySql varchar(200)
set @MySql="SELECT DISTINCT symbol+ ' '+ str([no]) +' ' + StartStationName as GoodsInfo FROM "+ @MyTabName +" where site ="+@SiteCode
Exec(@MySql)
GO



我的调用 是goodsinfo 'package_s',1003


可是报错:
将VARchar值 'SELECT DISTINCT Symbol + ' ' + STR([No]) + ' ' + StartStationName AS GoodsInfo
FROM Package_S WHERE (Site = '在转换为数据类型为smallint的列时发生语法错误。

(site字段是smallint型的。)


如果我直接执行SQL:
SELECT DISTINCT Symbol + ' ' + STR([No]) + ' ' + StartStationName AS GoodsInfo
FROM Package_S
WHERE (Site = 1003)
就一点问题也没有。

为什么?
 
...............
 
可能是引号问题,试试这个:
set @MySql= 'SELECT DISTINCT symbol+ '' ''+ str([no]) +'' '' + StartStationName as GoodsInfo FROM '+ @MyTabName +' where site ='+ @SiteCode
 
不行,还是老样子。。。。一点变化都没有。
 
问题在于您定义 @SiteCode 为 smallint,它怎么可以和 varchar(200) 的 @MySql 相加呢?
再试试: set @MySql= 'SELECT DISTINCT symbol+ '' ''+ str([no]) +'' '' + StartStationName as GoodsInfo FROM '+ @MyTabName +' where site ='+ convert(varchar,@SiteCode)
 
关注,对存储不熟,关注。。。。。。学习
 
yysun的应是正确的,我前两天也碰上这个问题,就是这样解决的。
 
set @MySql="SELECT DISTINCT symbol+ ' '+ str([no]) +' ' + StartStationName as GoodsInfo FROM "+ @MyTabName +" where site ="+Convert(@SiteCode as varchar(10))
 
好了,谢谢YYSUN,顺便问一下,
我这个存储过程可以放在sybase中使用吗?即:是不是通用的SQL语法.
 
多人接受答案了。
 
顶部