SQL 服务器存储过程最大增量 varchar 列和 return 输出
SQL Server Stored Procedure Increment max of varchar column and return output
这是我的 table D_Demande
和 idDemande
列类型 varchar(10)
:
这是我的存储过程:
ALTER PROCEDURE [dbo].[get_maxIdDemande]
@maxidDemande varchar(10) output
AS
BEGIN
declare @numDemande varchar(10)
declare @currentDemandeDate varchar
declare @currentnum varchar
declare @num varchar
select @numDemande = max([idDemande]) from [dbo].[D_DEMANDE]
IF (@numDemande is null)
BEGIN
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+'0001'
END
ELSE
BEGIN
set @currentDemandeDate = SUBSTRING(@numDemande,0,7)
set @currentnum = SUBSTRING(@numDemande,7,4)
IF(FORMAT(getdate(),'ddMMyy') = @currentDemandeDate)
BEGIN
set @num = CAST(@currentnum as int) + 1
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+@num
END
ELSE
BEGIN
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+'0001'
END
END
Return
END
调试这两个语句时得到0的问题:
set @currentDemandeDate = SUBSTRING(@numDemande,0,7)
set @currentnum = SUBSTRING(@numDemande,7,4)
你能帮忙吗?
你的问题出在你的变量声明中
ALTER PROCEDURE [dbo].[get_maxIdDemande]
@maxidDemande varchar(10) output
AS
BEGIN
declare @numDemande varchar(10)
declare @currentDemandeDate varchar --<-- This is declared as VARCHAR(1)
declare @currentnum varchar --<-- This is also declared as VARCHAR(1)
declare @num varchar --<--and this one too
需要显式定义varchar变量的长度,否则使用默认值1
应该是
declare @numDemande varchar(10)
declare @currentDemandeDate varchar(10)
declare @currentnum varchar(10)
declare @num varchar(10)
过程定义
你的 proc 的固定版本看起来像...
ALTER PROCEDURE [dbo].[get_maxIdDemande]
@maxidDemande varchar(10) output
AS
BEGIN
declare @numDemande varchar(10)
declare @currentDemandeDate varchar(10)
declare @currentnum varchar(10)
declare @num varchar(10)
select @numDemande = max([idDemande]) from [dbo].[D_DEMANDE]
IF (@numDemande is null)
BEGIN
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+'0001'
END
ELSE
BEGIN
set @currentDemandeDate = SUBSTRING(@numDemande,0,7)
set @currentnum = SUBSTRING(@numDemande,7,4)
IF(FORMAT(getdate(),'ddMMyy') = @currentDemandeDate)
BEGIN
set @num = RIGHT('0000' + CAST(CAST(@currentnum as int) + 1 AS VARCHAR(10)),4)
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+@num
END
ELSE
BEGIN
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+'0001'
END
END
END
执行过程
DECLARE @output VARCHAR(10);
EXEC [dbo].[get_maxIdDemande] @output OUTPUT
SELECT @output
根据 table 中的当前数据,它应该输出值 0704150002
这是我的 table D_Demande
和 idDemande
列类型 varchar(10)
:
这是我的存储过程:
ALTER PROCEDURE [dbo].[get_maxIdDemande]
@maxidDemande varchar(10) output
AS
BEGIN
declare @numDemande varchar(10)
declare @currentDemandeDate varchar
declare @currentnum varchar
declare @num varchar
select @numDemande = max([idDemande]) from [dbo].[D_DEMANDE]
IF (@numDemande is null)
BEGIN
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+'0001'
END
ELSE
BEGIN
set @currentDemandeDate = SUBSTRING(@numDemande,0,7)
set @currentnum = SUBSTRING(@numDemande,7,4)
IF(FORMAT(getdate(),'ddMMyy') = @currentDemandeDate)
BEGIN
set @num = CAST(@currentnum as int) + 1
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+@num
END
ELSE
BEGIN
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+'0001'
END
END
Return
END
调试这两个语句时得到0的问题:
set @currentDemandeDate = SUBSTRING(@numDemande,0,7)
set @currentnum = SUBSTRING(@numDemande,7,4)
你能帮忙吗?
你的问题出在你的变量声明中
ALTER PROCEDURE [dbo].[get_maxIdDemande]
@maxidDemande varchar(10) output
AS
BEGIN
declare @numDemande varchar(10)
declare @currentDemandeDate varchar --<-- This is declared as VARCHAR(1)
declare @currentnum varchar --<-- This is also declared as VARCHAR(1)
declare @num varchar --<--and this one too
需要显式定义varchar变量的长度,否则使用默认值1
应该是
declare @numDemande varchar(10)
declare @currentDemandeDate varchar(10)
declare @currentnum varchar(10)
declare @num varchar(10)
过程定义
你的 proc 的固定版本看起来像...
ALTER PROCEDURE [dbo].[get_maxIdDemande]
@maxidDemande varchar(10) output
AS
BEGIN
declare @numDemande varchar(10)
declare @currentDemandeDate varchar(10)
declare @currentnum varchar(10)
declare @num varchar(10)
select @numDemande = max([idDemande]) from [dbo].[D_DEMANDE]
IF (@numDemande is null)
BEGIN
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+'0001'
END
ELSE
BEGIN
set @currentDemandeDate = SUBSTRING(@numDemande,0,7)
set @currentnum = SUBSTRING(@numDemande,7,4)
IF(FORMAT(getdate(),'ddMMyy') = @currentDemandeDate)
BEGIN
set @num = RIGHT('0000' + CAST(CAST(@currentnum as int) + 1 AS VARCHAR(10)),4)
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+@num
END
ELSE
BEGIN
select @maxidDemande = FORMAT(getdate(),'ddMMyy')+'0001'
END
END
END
执行过程
DECLARE @output VARCHAR(10);
EXEC [dbo].[get_maxIdDemande] @output OUTPUT
SELECT @output
根据 table 中的当前数据,它应该输出值 0704150002