插入具有当前标识的新行作为值

时间:2015-11-02 10:06:40

标签: sql sql-server tsql sql-server-2005

不要问我为什么,但我想要一个将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]
)

谢谢

1 个答案:

答案 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