1

正如标题所说,如果我有一个表有这样的结构

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 年,是否存在这样的东西?

4

1 回答 1

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。然后数据库将物理存储该值并在适当时对其进行更新。

于 2012-10-02T07:05:14.663 回答