T-SQL 生成唯一代码
我有一个表联系人。
CREATE TABLE [dbo].[Contacts](
[ContactId] [int] IDENTITY(1,1) NOT NULL,
[ContactCode] [nvarchar](10) NOT NULL, --UNIQUE
[FirstName] [nvarchar](24) NOT NULL,
[MiddleName] [nvarchar](12) NULL,
[LastName] [nvarchar](24) NOT NULL,
CONSTRAINT [PK_Contacts] PRIMARY KEY CLUSTERED
(
[ContactId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
我希望能够从存储过程中生成 10 位联系代码,该存储过程应包含
First Two Digits of FirstName
First Digit of MiddleName(When MiddleName is not blank)
First Two or Three(When MiddleName is Blank) Digits of Last Name
Four digit number starting from zero.
示例。
John M. Denver = JOMDE-0001
John Denver = JODEN-0001
John Denver = JODEN-0002
Bob Dylan = BODYL-0001
建议的解决方案可以是一个函数,可以在将值保存到表之前从存储过程内部调用该函数。
CREATE FUNCTION GetContactCode
(
@FirstName nvarchar(24),
@MiddleName nvarchar(12),
@LastName nvarchar(24)
)
RETURNS nvarchar(10)
AS
BEGIN
RETURN('CODE')
END
有人可以帮忙吗?
I have a table contacts.
CREATE TABLE [dbo].[Contacts](
[ContactId] [int] IDENTITY(1,1) NOT NULL,
[ContactCode] [nvarchar](10) NOT NULL, --UNIQUE
[FirstName] [nvarchar](24) NOT NULL,
[MiddleName] [nvarchar](12) NULL,
[LastName] [nvarchar](24) NOT NULL,
CONSTRAINT [PK_Contacts] PRIMARY KEY CLUSTERED
(
[ContactId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
I would like to be able to generate a 10-digit contact code from the stored procedure which should comprise of
First Two Digits of FirstName
First Digit of MiddleName(When MiddleName is not blank)
First Two or Three(When MiddleName is Blank) Digits of Last Name
Four digit number starting from zero.
Example.
John M. Denver = JOMDE-0001
John Denver = JODEN-0001
John Denver = JODEN-0002
Bob Dylan = BODYL-0001
Proposed solution could be a function which could be called from inside the stored procedure before saving the values to the table.
CREATE FUNCTION GetContactCode
(
@FirstName nvarchar(24),
@MiddleName nvarchar(12),
@LastName nvarchar(24)
)
RETURNS nvarchar(10)
AS
BEGIN
RETURN('CODE')
END
Can anybody help?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 RANKING 子句是一种选择。
Using a RANKING clause is one option.
这个函数应该可以解决问题
This function should do the trick