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

问题描述 投票:0回答:2

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

CREATE TABLE tab_stores
(
    id_num INT IDENTITY(1, 1),
    sName VARCHAR(20),
    mySKey VARCHAR(20)
);

现在,当我使用下面的查询在此表中插入值时,它会插入值并将

id_num
增加 +1,工作正常。

INSERT tab_stores (sName, mySKey)
VALUES ('Store', 'Store');

插入的数据是

1,Store,Store

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

mySKey
列中,所以结果应该是

1,Store,Store1

我尝试使用下面的查询,但它不起作用 - 我明白了

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

INSERT tab_stores (sName, mySKey)
VALUES ('Store', 'Store' + id_num);

有人可以帮助我吗?谢谢你

sql-server database sql-server-2012 insert identity
2个回答
0
投票

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

  1. 在桌子顶部创建一个 view 来处理此问题:
CREATE VIEW dbo.view_Stores
AS
    SELECT
        id_num, sName,
        CONCAT(sName, id_num) AS mySKey
    FROM
        dbo.tab_stores;

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

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

SELECT *
FROM dbo.view_Stores;

1,'Store','Store1'
2,'StoreABC','StoreABC2'

0
投票

tab_scores
获取最大 id_num 值并与“Store”文本连接。

INSERT tab_stores (sName, mySKey)
VALUES ('Store', 'Store' + convert(varchar,(select isnull(max(id_num) + 1, 1) from tab_stores)));
© www.soinside.com 2019 - 2024. All rights reserved.