您的位置:首页 > 数据库

SQL viewId 比较好看的 Id

2016-05-18 15:01 591 查看
有时候我们希望 Id 要好看一些,比如 Id=1 -> Id=T000001

refer :
http://www.kodyaz.com/t-sql/custom-sequence-string-as-sql-identity-column.aspx http://www.sqlteam.com/article/custom-auto-generated-sequences-with-sql-server
方法有很多,我目前选择的方式是使用触发器在插入之后更新

我们把这个好看一点的Id称为 viewId 吧。

先做一个方法来格式化Id

调用 viewId = dbo.getViewId('T',CAST(inserted.Id as nvarchar(50)),6,'0');

drop function dbo.getViewId;
create function [dbo].[getViewId] (
@Prefix nvarchar(10),
@Id int,
@Length int,
@PaddingChar char(1) = '0'
)
returns nvarchar(MAX)
as
begin

return (
select @Prefix + RIGHT(REPLICATE(@PaddingChar, @Length) + CAST(@Id as nvarchar(10)), @Length)
)

end


针对某个表写入触发器逻辑

drop trigger OrdersAfterInsert;
create trigger OrdersAfterInsert on [dbo].[Orders]
for insert
as
update Orders set viewId = dbo.getViewId('O', CAST(inserted.Id as nvarchar(50)),6,'0')
from Orders inner join inserted on Orders.Id= inserted.Id;
go


如果表已经存在数据的话,要更新哦

update Orders set viewId = dbo.getViewId('O', CAST(Id as nvarchar(50)),6,'0');


创建column and UNIQUE

alter table Orders add viewId nvarchar(50) null;
create unique nonclustered index [UNIQUE_Orders_viewId]
on [dbo].[Orders]([viewId] asc) where ([viewId] IS NOT NULL AND [viewId] IS NOT NULL);


使用 Entity Framewrok的话可以把这个数据标签为 Computed.

public class Order
{
[Key]
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public string viewId { get; set; }
}


以上.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: