基于同一表中由'-';在SQL中

基于同一表中由'-';在SQL中,sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我有一个具有3个属性的表,如下所示,我想创建额外的列名作为“特殊ID”,它基于身份验证码、价格和卡号的最后4位数字。(这3个组合将以“-”分隔) 如何做到这一点?要创建并初始化新列,请尝试以下操作: ALTER TABLE yourtable ADD SpecialID varchar(200) UPDATE yourtable set SpecialID = auth_code + '-' + price + '-' + substring(card_no, len(card_

我有一个具有3个属性的表,如下所示,我想创建额外的列名作为“特殊ID”,它基于身份验证码、价格和卡号的最后4位数字。(这3个组合将以“-”分隔)


如何做到这一点?

要创建并初始化新列,请尝试以下操作:

ALTER TABLE yourtable ADD SpecialID varchar(200)

UPDATE yourtable 
set SpecialID = 
     auth_code + '-' + price + '-' + substring(card_no, len(card_no) - 4, len(card_no))
WHERE SpecialID is null

通常,使用计算值(来自其他列)添加一个额外的列是一个坏主意,因为这会带来数据不一致的风险以及数据冗余

如果您只是添加了一个这样的列,那么就需要有触发器来更新它

我有两个更好的想法,视图(ANSI SQL)和计算列(SQL Server):

备选案文1,意见:

create view viewname as
select Card_No, Auth_Code, price,
       auth_code + '-' + price + '-' + substring(card_no, len(card_no) - 4, len(card_no)) as SpecialID
from tablename
备选方案2,计算列:

ALTER TABLE tablename
ADD SpecialID AS auth_code + '-' + price + '-' + substring(card_no, len(card_no) - 4, len(card_no))

(从Joe Taras的答案中复制了一些代码,谢谢!)

改为创建一个视图。或者,SQL Server不是有“计算列”吗?@jarlh-如何做到这一点?@jarlh是的,所以我会这样做……我必须通过应用程序更新新列值,或者创建触发器,这是什么意思?添加列并更新其值后,您希望如何管理该字段?你的申请将写在那个字段上?或者你想使用一个触发器,那么,它的更新是由触发器管理的?在这里,我将对csv文件进行批量插入,然后我将执行上面的查询来添加该字段,这是正确的方法吗?好的,关于批量插入。之后,您的表可以由其他软件填充?是的,它将由其他软件填充
ALTER TABLE tablename
ADD SpecialID AS auth_code + '-' + price + '-' + substring(card_no, len(card_no) - 4, len(card_no))