那位帮我看看这段存储过程怎么了

dm1cyg 2005-12-30 06:57:30
CREATE PROCEDURE jhcgbm
@bj varchar(2),
@dd varchar(20)
AS
BEGIN
declare @i int
declare @s nvarchar(4000)
set @s = N'SELECT @i=1 FROM '+@dd
+ N' WHERE 销售编号 LIKE '''+@bj
+ N'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%'''

exec sp_executesql @s,N'@i int out',@i out

if @i=1
BEGIN
exec('SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
FROM ' +@dd+' WHERE 销售编号
LIKE '''+@bj+'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%''')
END
ELSE
exec('SELECT TOP 1 CONVERT(numeric(11,0),CONVERT(varchar(8),GETDATE(),112)+''000'',112)+1 AS 单据号
FROM '+@dd)
END
GO

这段代码为什么在我的表里一条数据没有的时候什么也不返回呢,而表里有记录的时候才能返回正常的单号呢
...全文
108 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ReViSion 2005-12-30
  • 打赏
  • 举报
回复
CREATE PROCEDURE jhcgbm
@bj varchar(2),
@dd varchar(20)
AS
BEGIN
declare @i int
declare @s nvarchar(4000)
set @s = N'SELECT @i=1 FROM '+@dd
+ N' WHERE 销售编号 LIKE '''+@bj
+ N'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%'''

exec sp_executesql @s,N'@i int out',@i out

if @i=1
BEGIN
exec('SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
FROM ' +@dd+' WHERE 销售编号
LIKE '''+@bj+'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%''')
END
ELSE
exec('SELECT CONVERT(numeric(11,0),CONVERT(varchar(8),GETDATE(),112)+''000'',112)+1 AS 单据号)

END
GO
dm1cyg 2005-12-30
  • 打赏
  • 举报
回复
我不知道怎么改呀
lsqkeke 2005-12-30
  • 打赏
  • 举报
回复
楼主 你这个存储过程该有个返回值吧,返回的值为单据号字符串吧!
不必返回记录集! 因为你那个集合就只是一个字段,并且就一个值!
改成返回字符串好多了
lsqkeke 2005-12-30
  • 打赏
  • 举报
回复
exec('SELECT TOP 1 CONVERT(numeric(11,0),CONVERT(varchar(8),GETDATE(),112)+''000'',112)+1 AS 单据号)
---------------------------------
你表中没有数据 你指定top 1 是没有意义的
是得不到你组成的字符串值的!!!!!
lsqkeke 2005-12-30
  • 打赏
  • 举报
回复
当你表中没有数据的时候,变量@a值为null
这时你返回的单据号直接指定为:(也就是else子句后面那部分改一下)
CONVERT(varchar(8),GETDATE(),112)+'0001'
不必再从表里面查询获得!
然后用一个字符串变量接收并返回
nononono 2005-12-30
  • 打赏
  • 举报
回复
这样试试:

CREATE PROCEDURE jhcgbm
@bj varchar(2),
@dd varchar(20)
AS
BEGIN

declare @i int
declare @s nvarchar(4000)

set @s = N'SELECT @i=1 FROM '+@dd
+ N' WHERE 销售编号 LIKE '''+@bj
+ N'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%'''

exec sp_executesql @s,N'@i int out',@i out

if @i is not null
BEGIN
exec('SELECT CONVERT(numeric(11,0), RIGHT(MAX(销售编号), 11)) + 1 AS 单据号
FROM ' +@dd+' WHERE 销售编号
LIKE '''+@bj+'''+SUBSTRING(CONVERT(varchar(8),GETDATE(),112),1,8)+''%''')
END
ELSE
exec('SELECT TOP 1 CONVERT(numeric(11,0),CONVERT(varchar(8),GETDATE(),112)+''000'',112)+1 AS 单据号)
END
return
nononono 2005-12-30
  • 打赏
  • 举报
回复
表里一条数据没有的时候你希望它返回什么?

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧