Sql server 2005 如何在SQLServer2005中从另一个表中的相应数据更新一个表中的数据
我在同一数据库服务器上的不同数据库中有两个表 这两个数据库的结构相同,但数据不同。Database1(Test1)是最新的,database2(Test2)是数据库的旧副本Sql server 2005 如何在SQLServer2005中从另一个表中的相应数据更新一个表中的数据,sql-server-2005,Sql Server 2005,我在同一数据库服务器上的不同数据库中有两个表 这两个数据库的结构相同,但数据不同。Database1(Test1)是最新的,database2(Test2)是数据库的旧副本 Test1有一个名为Employee的表,其中包含3000条记录 Test2有一个名为Employee的表,其中包含1000条记录 我需要从Test2中的同一个表中为一个名为DeptID的特定列更新Test1中的表,因为test2db中的Employee表(旧表)中的值已经更新。因此,我需要更新新数据库中的表,而旧数据库
- Test1有一个名为
的表,其中包含3000条记录Employee
- Test2有一个名为
的表,其中包含1000条记录Employee
Test1
DB中Employee
表中DeptID
列中Test2
DB中Employee
列中的任何值更新DeptID
列
我知道我可以恢复数据库本身,但这不是一个解决方案。我需要从Test2数据库更新Test1数据库中的值。如果两个数据库位于同一台服务器上,您应该能够创建如下SQL语句:
update t2
set t2.deptid = t1.deptid
from test1 t1, test2 t2
where t2.employeeid = t1.employeeid
UPDATE Test1.dbo.Employee
SET DeptID = emp2.DeptID
FROM Test2.dbo.Employee as 'emp2'
WHERE
Test1.dbo.Employee.EmployeeID = emp2.EmployeeID
从你的帖子中,我不太清楚你是想用Test2.dbo.Employee
中的值更新Test1.dbo.Employee
(这就是我的查询所做的),还是相反(因为你在Test1
中提到的db是新表……)
您不能对mysql使用from关键字使用test1
insert into employee(deptid)从test2.dbo.employee中选择deptid
INSERT INTO NEW_TABLENAME SELECT * FROM OLD_TABLENAME;
这是一个奇迹——没有轮到使用模式与custType完全匹配的DataTable调用此过程表单代码 创建表客户 ( id int identity(1,1)主键, 名称varchar(50), cnt varchar(10) )
是否只更新两个表上的值?或者你希望这两张表是相同的?不幸的是,你的问题不清楚。我想你很难用英语清楚地表达你的问题,但不要绝望!你可以举一些例子来帮助它。从每个表中发布5-10行,解释什么应该成为什么,这可能足以让我们理解您想要实现的目标。出色!!很简单,而且很有效(除了我从emp2中删除了引号)。非常感谢!正是我想要的。在使用子查询之前,我已经这样做了,但我知道必须有一种更简单的方法。我只想补充一点,我只想根据另一个表中的相应值更新一个表中的记录子集,这可以通过在WHERE子句中添加一个条件来轻松完成,例如,
WHERE Test1.dbo.Employee.EmployeeID=emp2.EmployeeID和Test1.dbo.Employee.Department in('Sales','Marketing'))
但如果两个数据库都在不同的服务器上,我们该怎么办?唯一的区别是这个版本使用了t2的别名。这非常有效。出于某种原因,@marc_的回答不起作用。可能是因为别名周围有引号?问题说明了不同的数据库。你没有考虑到这一点。另外,答案已经有了一个有效的公认答案。此外,请查看查询的格式设置。看一看。问题不是插入新行,而是用另一个现有表更新现有表。
update test1 t1, test2 t2
set t2.deptid = t1.deptid
where t2.employeeid = t1.employeeid
INSERT INTO NEW_TABLENAME SELECT * FROM OLD_TABLENAME;
UPDATE table1
SET column1 = (SELECT expression1
FROM table2
WHERE conditions)
[WHERE conditions];
create type custType as table
(
ctId int,
ctName varchar(20)
)
insert into customer values('y1', 'c1')
insert into customer values('y2', 'c2')
insert into customer values('y3', 'c3')
insert into customer values('y4', 'c4')
insert into customer values('y5', 'c5')
declare @ct as custType
insert @ct (ctid, ctName) values(3, 'y33'), (4, 'y44')
exec multiUpdate @ct
create Proc multiUpdate (@ct custType readonly) as begin
update customer set Name = t.ctName from @ct t where t.ctId = customer.id
end
public DataTable UpdateLevels(DataTable dt)
{
DataTable dtRet = new DataTable();
using (SqlConnection con = new SqlConnection(datalayer.bimCS))
{
SqlCommand command = new SqlCommand();
command.CommandText = "UpdateLevels";
command.Parameters.Clear();
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@ct", dt).SqlDbType = SqlDbType.Structured;
command.Connection = con;
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
{
dataAdapter.SelectCommand = command;
dataAdapter.Fill(dtRet);
}
}
}