我在同一个数据库服务器上的不同数据库中有两个表。
两个数据库都具有相同的结构,但数据不同。 Database1(Test1)是最新的,而database2(Test2)是数据库的旧副本。
Employee
的表,有3000条记录Employee
的表,有1000条记录我需要在Test2中的同一个表中为名为DeptID的特定列更新Test1中的表,因为Test2 DB(旧的)中Employee表中的值已更新。所以我需要从旧DB中的表中更新新DB中的表,该表有大约1000行。
换句话说,我需要使用DeptID
列中Employee
列中的任何值更新Test1
数据库中DeptID
表中的Employee
列Test2
数据库中的{1}}表。
我知道我可以恢复数据库本身,但这不是解决方案。我需要从Test2数据库更新Test1数据库中的值。
答案 0 :(得分:138)
如果两个数据库在同一台服务器上,您应该能够创建如下所示的SQL语句:
UPDATE Test1.dbo.Employee
SET DeptID = emp2.DeptID
FROM Test2.dbo.Employee as 'emp2'
WHERE
Test1.dbo.Employee.EmployeeID = emp2.EmployeeID
在您的帖子中,我不太清楚您是否希望更新 Test1.dbo.Employee
来自Test2.dbo.Employee
(这是我的查询所做的)的值,或者其他方式(因为你提到Test1
上的数据库是新表......)
答案 1 :(得分:14)
update t2
set t2.deptid = t1.deptid
from test1 t1, test2 t2
where t2.employeeid = t1.employeeid
答案 2 :(得分:2)
UPDATE table1
SET column1 = (SELECT expression1
FROM table2
WHERE conditions)
[WHERE conditions];
答案 3 :(得分:0)
尝试像
这样的查询INSERT INTO NEW_TABLENAME SELECT * FROM OLD_TABLENAME;
答案 4 :(得分:0)
这可以创造奇迹 - 轮到使用DataTable调用此过程表单代码,其模式与custType完全匹配 创建表客户 ( id int identity(1,1)主键, name varchar(50), cnt varchar(10) )
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);
}
}
}
答案 5 :(得分:-1)
UPDATE Employee SET Empid=emp3.empid
FROM EMP_Employee AS emp3
WHERE Employee.Empid=emp3.empid
答案 6 :(得分:-3)
使用test1
插入employee(deptid)从test2.dbo.employee选择deptid