Sql server Sql Server更新中的查询
我有两张桌子Sql server Sql Server更新中的查询,sql-server,sql-update,Sql Server,Sql Update,我有两张桌子 表A: name empid city ----------------------------------- Joesph Morgan JM2345 New york 表B: name -------------- Morgan, Joseph 现在我想在B中添加一列,其中包含empid 我本可以根据名称列加入表,但格式上的差异让我很难 首先,我将表B的名称更改为firstname-lastname格式,并在B中新创建的列emp
表A
:
name empid city
-----------------------------------
Joesph Morgan JM2345 New york
表B
:
name
--------------
Morgan, Joseph
现在我想在B中添加一列,其中包含empid
我本可以根据名称列加入表,但格式上的差异让我很难
首先,我将表B的名称更改为firstname-lastname格式,并在B中新创建的列empid中获取数据
但我不想改变数据的格式
我采取了以下步骤
Alter Table B
Add Empid varchar(10)
Update table B
set name=CONCAT(REPLACE(SUBSTRING([name], CHARINDEX(',', [name]), LEN([name])), ',', ''),' ',LEFT([name], CHARINDEX(',', [name]) - 1)
Update table B
set empid=A.empid
where B.name=A.name
请告诉我名称列保持原样的方法。如果我正确理解您的情况,您希望a表中的所有当前empID都位于B表的新列中吗
ALTER TABLE B
ADD empID varchar(10) NULL
因此,您在表B中创建了一个新列,它允许NULL(目前)
这将在表B.empid中插入A.empid中的所有值
希望这有帮助试试这个
更新的查询
update B set B.empid=a.empid from B, A where
A.name=(Substring(b.name, Charindex(',',b.name)+1,len(b.name)) +' '+
Substring(b.name, 1,Charindex(',',b.name)-1)
)
修复您的数据。在一个表中添加外键和/或定义empid,并在其他表中使用它而不是名称。否则你只是在等待问题的发生。
create table A(
name varchar(50),
empid varchar(50),
city varchar(50)
)
insert into A values('Joesph Morgan', 'JM2345', 'New york')
create table B(
empid varchar(50),
name varchar(50)
)
insert into B(name) values('Morgan,Joesph')
update B set B.empid=a.empid from B, A where
A.name=(Substring(b.name, Charindex(',',b.name)+1,len(b.name)) +' '+
Substring(b.name, 1,Charindex(',',b.name)-1)
)