35 lines
		
	
	
		
			879 B
		
	
	
	
		
			Transact-SQL
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			879 B
		
	
	
	
		
			Transact-SQL
		
	
	
	
 | 
						|
ALTER PROCEDURE [dbo].[SpGetNewCode3]
 | 
						|
 @tableName VARCHAR(50),/*表名*/
 | 
						|
 @columnName VARCHAR(50),/*列名*/
 | 
						|
 @prefix VARCHAR(100),/*流水号编码前缀*/
 | 
						|
 @returnVal NVARCHAR(200) OUTPUT
 | 
						|
AS
 | 
						|
/*获取一个新的流水号(后三位上增加)*/
 | 
						|
DECLARE 
 | 
						|
        @sql NVARCHAR(500),
 | 
						|
        @old NVARCHAR(50),
 | 
						|
        @newid VARCHAR(50),
 | 
						|
        @prefix2 NVARCHAR(100),
 | 
						|
        @maxId NVARCHAR(50)/*已分配的最大值*/
 | 
						|
SET @prefix2= REPLACE(@prefix, @columnName, '')
 | 
						|
SELECT @sql=N'SELECT @maxId=MAX('+@columnName+') from '+@tableName+' where ' + @columnName + '  like ' + '''' + @prefix2 + '%'''
 | 
						|
EXEC sp_executesql @sql, N'@maxId nvarchar(50) OUTPUT', @maxId OUTPUT 
 | 
						|
SET @old=@maxId
 | 
						|
 | 
						|
IF(@old IS NULL)
 | 
						|
BEGIN
 | 
						|
SET @newid=@prefix+'001'
 | 
						|
END
 | 
						|
 | 
						|
ELSE
 | 
						|
BEGIN
 | 
						|
SET @newid = (SELECT MAX(RIGHT(@old,3)))+1
 | 
						|
SET @newid = @prefix +RIGHT('000'+@newid,3)
 | 
						|
END
 | 
						|
 | 
						|
SET @returnVal=@newid
 | 
						|
 | 
						|
GO 
 | 
						|
 |