不要问我为什么,但我想要一个将Identity存储为varchar的列。是否可以在创建过程中分配它,还是需要范围标识和更新?
编辑:澄清这是一个我无法以任何方式修改的现有表格。我只想插入新行。
通常我会这样做:
INSERT INTO [User]
(
-- id -- this column value is auto-generated,
useridcr,
dtcr,
varcharid
)
VALUES
(
25,
'2015-01-30 00:00:00.000'
''
)
SET @id = SCOPE_IDENTITY()
UPDATE [User]
SET
varcharid = @id
WHERE id = @id
但是在创建新身份之前是否有可能知道新身份的价值?所以我可以使用insert语句中的值。像这样:
INSERT INTO [User]
(
-- id -- this column value is auto-generated,
useridcr,
dtcr,
varcharid
)
VALUES
(
25,
'2015-01-30 00:00:00.000'
[generatedID]
)
谢谢
答案 0 :(得分:2)
使用 computed column
:
CREATE TABLE [User]
(
id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
useridcr INT,
dtcr INT ,
varcharid AS CAST(id AS VARCHAR(10))
);
的 LiveDemo
强>
然后,您不需要捕获上一个生成值并更新数据。
或者,您可以使用VIEW
:
CREATE VIEW vw_user
AS
SELECT *,
[varcharid] = CAST(id AS VARCHAR(10))
FROM [User]
修改强>
您可以使用触发器:
CREATE TRIGGER trg_User
ON [User]
AFTER UPDATE, INSERT
AS
BEGIN
UPDATE u
SET varcharid = CAST(i.id AS VARCHAR(100))
FROM [User] u
JOIN inserted i
ON u.id = i.id;
END
GO
的 SqlFiddleDemo
强>