I have a identity column and i have other column while inserting a new row in
table i need to insert into third column with concatenate of two columns result
供参考,请参阅下表
------------------------------------------------
A | B | c
----------------------------------------------
1 | 33 | 133(1 [identity result] + 33)
2 | 112 | 2112
请帮我解决这个问题。
答案 0 :(得分:3)
这个问题已经有了答案,但我认为这不是实现这个问题的最好方法。
以下是如何使用computed column实现目标的示例。
CREATE TABLE dbo.calculatedTEST (
A INT IDENTITY(1,1) NOT NULL,
B INT NOT NULL,
c AS CONVERT(INT,CONVERT(VARCHAR(max),A)+CONVERT(VARCHAR(max),B))
)
insert into dbo.calculatedTEST
(B)
values
(1),
(1),
(2),
(2)
select * from dbo.calculatedTEST
计算列是根据可以使用其他的表达式计算的 同一个表中的列。表达式可以是非计算列 名称,常量,函数以及这些连接的任意组合 一个或多个运营商。表达式不能是子查询。
除非另有说明,否则计算列是虚拟列 没有物理存储在表中。他们的价值被重新计算 每次在查询中引用它们。数据库引擎使用 CREATE TABLE和ALTER TABLE语句中的PERSISTED关键字 在表中物理存储计算列。他们的价值观是 当计算中的任何列发生更改时更新。通过 将计算列标记为PERSISTED,您可以在a上创建索引 计算列是确定性但不精确的。另外, 如果计算列引用CLR函数,则为数据库引擎 无法验证该功能是否真正具有确定性。在这 case,计算列必须是PERSISTED,以便索引可以 在它上面创建。有关更多信息,请参阅在Computed上创建索引 列。
答案 1 :(得分:0)
不需要插入C列,您可以使用Select Statement轻松获取C列。
像这样。select A,B,cast(Cast(A as varchar(max))+cast(B as varchar(max)) as
varchar(max)) as C from Your_Table_Name
如果确实需要插入C列,则必须同时运行insert和Update查询以插入表格的C列中的值。
像:
insert into Table_Name(B) values('33');Select IDENT_CURRENT();
--you'll get the inserted Identity.
--now run the Update query for Identity you get from the insert query.
样品。
create table #tab1
(
Id bigint identity(1,1) primary key,
a int,
b varchar(50)
)
insert into #tab1(a) values(88);
declare @id1 as bigint set @id1=(select SCOPE_IDENTITY());
update #tab1 set b=cast(id as varchar(max))+cast(a as varchar(max)) where Id=@id1