将concatenate Identity列与其他列插入

时间:2015-02-23 12:08:58

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2012

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

请帮我解决这个问题。

2 个答案:

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