【问题标题】:Storing hex equivalent in identity column in sql在sql的标识列中存储等效的十六进制
【发布时间】:2012-10-01 17:52:20
【问题描述】:

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

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,它应该存储0x012 as 0x02...10 as 0xA等等?

我不想知道任何技巧之类的东西,我知道我可以将此列创建为varchar,然后为插入创建一个过程,或为插入创建一个触发器,这将执行所需的转换并产生想要的结果,这不是大问题。

但我想知道是否有一个内置函数/程序/触发器可以帮助我实现我想要实现的目标?不一定在SQL Server 2008,但可能在2012,有没有这样的东西?

【问题讨论】:

  • 它以二进制形式存储INT 是否打扰您?您要求的是格式化显示值。看看here。
  • 为什么你觉得有必要控制 SQL 如何存储这个值?它有什么用途?

标签: sql-server sql-server-2008 tsql hex sql-server-2012


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    • 2023-03-19
    相关资源
    最近更新 更多