【问题标题】:Combine(Concatenate) two columns to third(PK) on insert query, sql server 2014在插入查询中将两列组合(连接)到第三列(PK),sql server 2014
【发布时间】:2015-07-10 00:50:27
【问题描述】:

我正在为 windows 窗体应用程序使用 sql server 2014,我有这样的列

标识 |帐号 |位置

栏目详情:

id ---> int,不为空,自动递增

AccountNo ---> varchar(50), not null, Primary Key

位置 ---> varchar(50),不为空

我想运行 sql INSERT 查询来输入用户输入,这样它就会像这样

|编号 |帐号 |位置|

| 10000 | PK10000 | PK |

我正在考虑这样的查询

string strCommand ="INSERT INTO Customer(ID, AccountNo, Location) 值 (@ID, CONCAT(@Location, @ID [, @AccountNo]), @Location)";

或者,如果由于 AccountNo 是 PK 而无法通过这种方式,是否可以创建一个在插入时合并两列的触发器

请给点建议..

【问题讨论】:

  • 好像AccountNo只是其他两列的串联?您应该查看计算列。

标签: sql-server


【解决方案1】:

你真的不应该像这样连接主键值。例如,您可能会得到重复的值。最好创建一个 IDENTITY 列作为主键。如果你真的需要额外的列来显示,那么添加一个计算列。例如:

CREATE TABLE MyTable
(
    ID INT NOT NULL IDENTITY(1, 1) PRIMARY KEY,
    Location VARCHAR(20) NOT NULL,
    AccountNo AS CAST(ID AS VARCHAR) + Location
)

现在你只需要像这样插入:

INSERT INTO MyTable (Location) VALUES ('PK')

这将为您提供具有这些值的一行:

ID  Location AccountNo
1   PK       1PK

您还可以在计算列上创建一个约束来强制 AccountNo 的唯一值:

ALTER TABLE MyTable
    ADD CONSTRAINT UX_MyTable_AccountNo UNIQUE (AccountNo)

【讨论】:

  • 谢谢它似乎有效。因为有列的表在那里,所以我刚刚更新了您在 SSMS 中所说的 AccountNo。我只是更改了语句的顺序以获取 'PK10000' 格式的 AccountNo。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2017-09-06
相关资源
最近更新 更多