将标识列值作为参数插入到其他列

0 t-sql sql-server identity insert sql-server-2012

我有一个名为 tab_stores 的表,它的结构如下所示

CREATE TABLE tab_stores
(
    id_num INT IDENTITY(1, 1),
    sName VARCHAR(20),
    mySKey VARCHAR(20)
);
Run Code Online (Sandbox Code Playgroud)

现在,当我使用下面的查询在此表中插入值时,它会插入值并增加id_num+1,这工作正常。

INSERT tab_stores (sName, mySKey)
VALUES ('Store', 'Store');
Run Code Online (Sandbox Code Playgroud)

插入的数据是

1,Store,Store
Run Code Online (Sandbox Code Playgroud)

我想稍微修改一下,以便当我插入行时,自动递增的列值应该被后固定并添加到mySKey列中,所以结果应该是

1,Store,Store1
Run Code Online (Sandbox Code Playgroud)

我尝试使用下面的查询,但它不起作用 - 我得到

消息 207,级别 16,状态 1,服务器 49706b09f367,第 7 行
无效的列名称“id_num”

INSERT tab_stores (sName, mySKey)
VALUES ('Store', 'Store' + id_num);
Run Code Online (Sandbox Code Playgroud)

谁能帮帮我吗?谢谢

mar*_*c_s 5

如果此规则始终适用 - 那么您有两个选择:

  1. 在表顶部创建一个视图来处理此问题:
CREATE TABLE dbo.tab_stores
(
    id_num INT IDENTITY(1, 1),
    sName VARCHAR(20)
);

CREATE VIEW dbo.view_Stores
AS
    SELECT
        id_num, sName,
        sName + CAST(id_num AS VARCHAR(10)) AS mySKey
    FROM
        dbo.tab_stores;

SELECT *
FROM dbo.view_Stores;
Run Code Online (Sandbox Code Playgroud)
  1. 您还可以在基表中创建计算列(而不是创建单独的列并填充它):
CREATE TABLE dbo.tab_stores
(
    id_num INT IDENTITY(1, 1),
    sName VARCHAR(20),
    mySKey AS sName + CAST(id_num AS VARCHAR(10)) PERSISTED
);

INSERT INTO dbo.tab_stores (sName) 
VALUES ('Store'), ('StoreABC');

SELECT *
FROM dbo.view_Stores;

1,'Store','Store1'
2,'StoreABC','StoreABC2'
Run Code Online (Sandbox Code Playgroud)