我有个设想。我有一个属性表,它有许多字段,包括属性大小。因此,如果某个属性的大小为5,那么在属性表中,它将显示5,但是如果用户认为它的大小不是5,而是它的6。所以我想处理该用户,将其大小保存为6,但不更改原始值(即5)。此外,如果用户获得该属性记录,它将显示该用户的6大小,但对于所有其他用户,它将显示5大小。
有谁能帮助我在表结构中或在显示特定于用户的值时处理这个场景吗?我的数据库位于sql server 2012中。
发布于 2015-01-08 12:00:58
如果在数据库级别上可以识别用户,则可以按照这些思路进行如下操作:
您可以创建通常的表加上一个包含用户自定义的表:
create table dbo.T (
ID varchar(19) not null primary key,
PropertySize int not null
)
go
create table dbo.T_User (
ID varchar(19) not null,
[User] sysname not null,
PropertySize int null
)然后创建一个视图,通过该视图进行所有交互,而不是表:
create view dbo.V
with schemabinding
as
select
t.ID,
ISNULL(u.PropertySize,t.PropertySize) as PropertySize
from
dbo.T t
left join
dbo.T_User u
on
t.ID = u.ID and
u.[User] = SUSER_NAME()然后用几个触发器来确保事情得到适当的维护:
create trigger T_V_I on dbo.V instead of insert
as
insert into dbo.T (ID,PropertySize) select ID,PropertySize from inserted
go
create trigger T_V_U on dbo.V instead of update
as
merge into dbo.T_User u
using inserted s
on u.ID = s.ID
when matched then update set PropertySize= s.PropertySize
when not matched then insert (ID,[User],PropertySize) values (s.ID,SUSER_NAME(),s.PropertySize);因此,基本上,每个用户自定义都存储为单独的行,并且基表包含用户将看到的“默认值”值,除非他们已经应用了自定义。
根据所使用的身份验证选项,SUSER_NAME可能不是正确的函数,而是其他各种USER函数中的一个。
https://stackoverflow.com/questions/27838217
复制相似问题