CREATE PROCEDURE [dbo].[SpGetNewTrustCode5ByProjectId] @tableName VARCHAR(50),/*表名*/ @columnName VARCHAR(50),/*列名*/ @projectId NVARCHAR(50),/*项目*/ @prefix VARCHAR(50),/*流水号编码前缀*/ @returnVal NVARCHAR(50) OUTPUT AS /*获取一个新的流水号(后五位上增加)*/ DECLARE @sql NVARCHAR(500), @old NVARCHAR(50), @newid VARCHAR(50), @maxId NVARCHAR(50)/*已分配的最大值*/ SELECT @sql=N'SELECT @maxId=MAX('+@columnName+') from '+@tableName+' where ProjectId = ''' + @projectId + '''and CH_TrustType=''1'' and ' + @columnName+' like ' + '''%' + @prefix + '%''' EXEC sp_executesql @sql, N'@maxId nvarchar(50) OUTPUT', @maxId OUTPUT /*因为最后字串包括R1,K1,所以这么处理*/ SET @old=REVERSE(SUBSTRING(REVERSE(@maxId),1,CHARINDEX('-',REVERSE(@maxId))-1)) IF(@old IS NULL) BEGIN SET @newid=@prefix+'0001' END ELSE BEGIN SET @newid = (SELECT MAX(LEFT(@old,4)))+1 SET @newid = @prefix +RIGHT('0000'+@newid,4) END SET @returnVal=@newid GO