文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 招聘 专题 新闻
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» 微软SQL Server专区 » SQL Server应用开发 » 这段存储过程有什么问题?       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: 这段存储过程有什么问题?  ( 查看:116  回复:5 )   
  本主题由 阿楚 于 2008-5-7 13:35 移动    该主题悬赏的20无忧币已被全部领完 
 
wiwi
新新人类  点击可查看详细



帖子 30
精华 0
无忧币 42
积分 62
阅读权限 20
注册日期 2007-8-2
最后登录 2008-5-14 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-7 13:16   标题:这段存储过程有什么问题?
上一帖 |
大家帮忙看看 这段存储过程 有什么问题 调试符合要求 但代码里调用却给出错误结果 还有输入参数@createdate2   varchar(10)   这一行为什么不能注释掉?(注释就报错:  "服务器: 消息 156,级别 15,状态 1,过程 dt_distrbute_shlef2,行 27
在关键字 'AS' 附近有语法错误。")

附件是此过程的文本 请大家帮忙看看 谢谢了!
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO









ALTER                                           PROC dt_distrbute_shlef2
@spec varchar(10),
@num   varchar(10),
[url=mailto:--@unit]--@unit[/url] varchar(10),
@kind varchar(10),
@createdate2   varchar(10)   
--输入参数
AS
declare @shelf_id varchar(10)
declare @kind_id varchar(10)--080507
declare @shelfNum INT
--declare  @dt1 datetime
declare  @js  INT
declare  @num1  INT--存放调增货物数量
declare  @n INT
SET NOCOUNT ON
--IF ISNULL(@createdate,'')='' RETURN--080506
IF ISNULL(@spec,'')='' RETURN
--IF ISNULL(@goodstype,'')='' RETURN
--IF ISNULL(@unit,'')='' RETURN
IF ISNULL(@kind,'')='' RETURN
IF ISNULL(CAST(@num as DECIMAL),0)

CREATE TABLE #temp(
SHELFID varchar(10) NOT NULL,
NUMBER int  NULL
)
set @kind_id=(select KIND_ID  FROM KIND WHERE [url=mailto:KIND_NAME=@kind]KIND_NAME=@kind[/url] )

--///////////////////////////////////////////////////
SELECT DISTINCT FLOOR,WAREHOUSE,AREA,CHANNEL,DEEP,shelf_id,AMOUNT into #t1 FROM CURRENT_SHELF_STORAGE_VIEW WHERE  [url=mailto:SPEC_ID=@spec]SPEC_ID=@spec[/url] AND AMOUNT

BEGIN---------------------------------------LOOP1
--调增
if cast(CAST(@num as DECIMAL) as int)
else
BEGIN---------------------------------------LOOP2
set @shelf_id=(select shelf_id  FROM #t1)
set @num1=@js-(select AMOUNT  FROM #t1)
INSERT #temp VALUES(@shelf_id,@num1)
set @num =cast(CAST(@num as DECIMAL) as int)-@num1
IF(CAST(CAST(@num as DECIMAL) AS INT)%@js =0)
BEGIN
  SET @shelfNum=cast(CAST(@num as DECIMAL) as int)/@js
END
ELSE
BEGIN
SET @shelfNum=cast(CAST(@num as DECIMAL) as int)/@js+1
END
--变量@shelfNum为当前剩余货物分配货位数量
set @n=@shelfNum+1
--set ROWCOUNT  @shelfNum  DECLARE c CURSOR LOCAL FOR
set ROWCOUNT  @n DECLARE c CURSOR LOCAL FOR
select   shelf_view.shelf_id from  shelf_view WHERE shelf_view.POS_STATUS = '0'and [url=mailto:shelf_view.KIND_ID=@kind_id--080507]shelf_view.KIND_ID=@kind_id--080507[/url]
OPEN c
FETCH      c   into @shelf_id
WHILE   @@FETCH_STATUS   =   0   
--fetch语句成功(结果集中存在行)
  BEGIN
  IF(cast(CAST(@num as DECIMAL) as int)>@js)
  BEGIN
  INSERT #temp VALUES(@shelf_id,@js)
   END
   ELSE
  BEGIN
   INSERT #temp VALUES(@shelf_id,cast(CAST(@num as DECIMAL) as int))
   END
    FETCH  NEXT   FROM  c  into @shelf_id
    set @num =cast(CAST(@num as DECIMAL) as int)-@js
    set @shelfNum=@shelfNum-1
    set @n=@n-1
   END   
  CLOSE   c   
  DEALLOCATE   c  
--if(@shelfNum0)
if(@n0)
--如果同排同列空货位不够,即没有分配完,则在剩下空货位中按顺序分配地址
BEGIN
--set ROWCOUNT @shelfNum  DECLARE shlef_cursor CURSOR LOCAL FOR SELECT b.shelf_id FROM
set ROWCOUNT @n  DECLARE shlef_cursor CURSOR LOCAL FOR SELECT b.shelf_id FROM
dbo.NULL_CHANNEL_VIEW  a INNER JOIN dbo.SHELF_VIEW b ON a.FLOOR = b.FLOOR AND a.WAREHOUSE  =b.WAREHOUSE AND a.AREA = b.AREA AND a.CHANNEL = b.CHANNEL
open shlef_cursor
FETCH   shlef_cursor   into @shelf_id
WHILE   @@FETCH_STATUS   =   0  
BEGIN   
   IF(cast(CAST(@num as DECIMAL) as int)>@js)
  BEGIN
  INSERT #temp VALUES(@shelf_id,@js)
   END
   ELSE
  BEGIN
   INSERT #temp VALUES(@shelf_id,cast(CAST(@num as DECIMAL) as int))
   END
  FETCH   NEXT   FROM   shlef_cursor into @shelf_id  
set @num =cast(CAST(@num as DECIMAL) as int)-@js
    set @shelfNum=@shelfNum-1
    END   
  CLOSE   shlef_cursor   
  DEALLOCATE   shlef_cursor  
END
END-----------------------------------------LOOP2
END-----------------------------------------LOOP1
else
BEGIN---------------------------------------LOOP1
set ROWCOUNT  @shelfNum  DECLARE c CURSOR LOCAL FOR
select   shelf_view.shelf_id from  shelf_view WHERE shelf_view.POS_STATUS = '0'and [url=mailto:shelf_view.KIND_ID=@kind_id--080507]shelf_view.KIND_ID=@kind_id--080507[/url]
OPEN c
FETCH      c   into @shelf_id
WHILE   @@FETCH_STATUS   =   0   
--fetch语句成功(结果集中存在行)
  BEGIN
  IF(cast(CAST(@num as DECIMAL) as int)>@js)
  BEGIN
  INSERT #temp VALUES(@shelf_id,@js)
   END
   ELSE
  BEGIN
   INSERT #temp VALUES(@shelf_id,cast(CAST(@num as DECIMAL) as int))
   END
    FETCH  NEXT   FROM  c  into @shelf_id
    set @num =cast(CAST(@num as DECIMAL) as int)-@js
    set @shelfNum=@shelfNum-1
   END   
  CLOSE   c   
  DEALLOCATE   c  
if(@shelfNum0)
--如果同排同列空货位不够,即没有分配完,则在剩下空货位中按顺序分配地址
BEGIN
set ROWCOUNT @shelfNum  DECLARE shlef_cursor CURSOR LOCAL FOR SELECT b.shelf_id FROM
dbo.NULL_CHANNEL_VIEW  a INNER JOIN dbo.SHELF_VIEW b ON a.FLOOR = b.FLOOR AND a.WAREHOUSE  =b.WAREHOUSE AND a.AREA = b.AREA AND a.CHANNEL = b.CHANNEL
open shlef_cursor
FETCH   shlef_cursor   into @shelf_id
WHILE   @@FETCH_STATUS   =   0  
BEGIN   
   IF(cast(CAST(@num as DECIMAL) as int)>10)
  BEGIN
  INSERT #temp VALUES(@shelf_id,@js)
   END
   ELSE
  BEGIN
   INSERT #temp VALUES(@shelf_id,cast(CAST(@num as DECIMAL) as int))
   END
  FETCH   NEXT   FROM   shlef_cursor into @shelf_id  
set @num =cast(CAST(@num as DECIMAL) as int)-@js
    set @shelfNum=@shelfNum-1
    END   
  CLOSE   shlef_cursor   
  DEALLOCATE   shlef_cursor  
END
END-----------------------------------------LOOP1

select * FROM #temp
DROP table #temp





GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

[ 本帖最后由 wiwi 于 2008-5-8 09:19 编辑 ]

附件(查看下载说明): [过程文本] dt_distrbute_shlef2.rar (2008-5-8 09:19,大小:1.63 K)
该附件被下载 1 次     您下载该主题帖内所有附件同时将被扣掉2点无忧币
该无忧币将被自动加到附件发表者的ID上      查看分数政策说明




千里之外,传递你对震灾人民的关怀
2008-5-7 13:161楼
[ 顶部 ]
 
boyi55
副版主  点击可查看详细


诚信兄弟   中秋活动勋章  
帖子 775
精华 1
无忧币 3229
积分 875
阅读权限 140
来自 (保密)
注册日期 2006-1-12
最后登录 2008-5-16 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2008-5-7 16:54  该回复被 wiwi 奖励 20 点无忧币
此回复于2008-05-08 16:10被 wiwi 评为最佳答案

论坛会自动加超链接,请把你的过程保存成文本上传.让大家一块来分析下原因



Life is a journey.Enjoy the ride.
2008-5-7 16:542楼
[ 顶部 ]
 
boyi55
副版主  点击可查看详细


诚信兄弟   中秋活动勋章  
帖子 775
精华 1
无忧币 3229
积分 875
阅读权限 140
来自 (保密)
注册日期 2006-1-12
最后登录 2008-5-16 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2008-5-7 16:54 
可能是上一行中“,”的问题。



Life is a journey.Enjoy the ride.
2008-5-7 16:543楼
[ 顶部 ]
 
wiwi
新新人类  点击可查看详细



帖子 30
精华 0
无忧币 42
积分 62
阅读权限 20
注册日期 2007-8-2
最后登录 2008-5-14 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-7 18:48   标题:回复 #2 boyi55 的帖子

不是



千里之外,传递你对震灾人民的关怀
2008-5-7 18:484楼
[ 顶部 ]
 
wiwi
新新人类  点击可查看详细



帖子 30
精华 0
无忧币 42
积分 62
阅读权限 20
注册日期 2007-8-2
最后登录 2008-5-14 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-5-8 16:09   标题:回复 #1 wiwi 的帖子

问题自己解决了,eclipse程序里面不能将汉字作为参数传给存储过程,不知道为什么,但存储过程调试时可以将汉字作为输入参数,真高兴 困扰半个多月的问题终于解决了!!



千里之外,传递你对震灾人民的关怀
2008-5-8 16:095楼
[ 顶部 ]
 
boyi55
副版主  点击可查看详细


诚信兄弟   中秋活动勋章  
帖子 775
精华 1
无忧币 3229
积分 875
阅读权限 140
来自 (保密)
注册日期 2006-1-12
最后登录 2008-5-16 离线

[查看资料]  [发短消息]  [Blog
[个人主页]    QQ       
发表于:2008-5-8 21:47 
问题解决就好.恭喜搂主!



Life is a journey.Enjoy the ride.
2008-5-8 21:476楼
[ 顶部 ]
     
论坛跳转:  

| | |

| | |

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号