正如标题所说,如果我有一个表有这样的结构
create table myTable
(
ID int identity(1,1) not null,
col1 varchar(20) not null,
col2 varchar(20) not null
constraint pk_myTable primary key (ID)
)
如果我在此表中插入一些值,它将自动在col ID
中取值。我想知道是一种可以让SQL Server在列中存储十六进制等效项的方法。比方说,对于1,它应该存储0x01
2 as 0x02
... 10 as 0xA
等等?
我不想知道任何技巧或其他东西,我知道我可以创建这个col作为varchar
,然后创建一个插入过程,或创建一个插入触发器,它将执行所需的转换和会产生预期的结果,不是个大问题。
但是我想知道的是有一个内置的函数/过程/触发器可以帮助我实现我想要实现的目标吗?不一定在SQL Server 2008中,但可能在2012年,是否存在类似的内容?
答案 0 :(得分:2)
我同意Joe Stefanelli和Habo的说法,你不需要这样做。这说明该技术在其他场景中很有用。
像这样定义你的表(注意计算列)
CREATE TABLE mytable(
ID int identity(1,1) not null,
col1 varchar(20) not null,
col2 varchar(20) not null,
ComputedHexColumn AS CONVERT(VARBINARY(8), ID),
CONSTRAINT pk_myTable PRIMARY KEY CLUSTERED(ID)
)
然后填充它
INSERT INTO mytable(col1,col2)
SELECT 'col1 - 1','col2 - 1'
UNION SELECT 'col1 - 2','col2 - 2'
UNION SELECT 'col1 - 3','col2 - 3'
UNION SELECT 'col1 - 4','col2 - 4'
然后,只要您从表中选择,它就会包含十六进制值
SELECT * FROM mytable
如果计算值的计算成本要高得多,那么您可以将该列标记为PERSISTED。然后,数据库将物理存储该值并在适当时更新它。