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。SQLServerに16進数に相当するものを列に格納させる方法を知りたいです。たとえば、1の場合、保存する必要があり0x01 2 as 0x02ます...10 as 0xAなど?

トリックなどは知りたくありません。この列をvarchar作成してから、挿入のプロシージャを作成するか、挿入のトリガーを作成して、必要な変換を実行し、目的の結果を生成できることを知ってます。大きな問題です。

しかし、私が知りたいのは、私が達成しようとしていることを達成するのに役立つ組み込みの関数/手順/トリガーがありますか?必ずしもSQLServer2008にあるとは限りませんが、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'

次に、テーブルから選択するたびに、16 進値が含まれます

SELECT * FROM mytable

計算列を含む結果を示す画像

計算された値の計算コストがはるかに高かった場合は、列を PERSISTED としてマークできます。データベースは値を物理的に保存し、必要に応じて更新します。

于 2012-10-02T07:05:14.663 に答える