我将根据模型列一起将table1的一些列和一些行更新到table2。
例如DATA1DB数据库中的table1
| id | name | address | color | model |
| 1 avi aadd blue mod1
| 2 bref ddff red mod2
| 3 cind ffdd red mod1
| 4 davi ffgg green mod1
DATA2DB数据库中的表2
| id | name | address | color | model |
| 1 avi aadd red mod1
| 2 bref dddd red mod2
| 3 cind ffff red mod1
| 4 davi gggg red mod1
当执行基于id =(1,3,4)的更新时,我希望table2与table1相同。 在我的存储过程中,我有此代码
ALTER PROCEDURE [dbo].[updatemultiple]
@id varchar (5)
AS BEGIN SET NOCOUNT ON
begin
UPDATE DATA2DB.table2
SET [DATA2DB].table2.address= [DATA1DB].table1.address,
[DATA2DB].table2.color = [DATA1DB].table1.color,
FROM [DATA2DB].table2
INNER JOIN [DATA1DB].table1
ON [DATA2DB].table2.id = [DATA1DB].table2.id
where LTRIM(RTRIM([DATA1DB].table1.id)) = LTRIM(RTRIM(@id))
我想要DATA2DB数据库中的结果表2
| id | name | address | color | model |
1 avi aadd blue mod1
3 cind ffdd red mod1
4 davi ffgg green mod1
答案 0 :(得分:1)
我假设您想在DB1更新时更新DB2。
如果是这样,则可以将更新触发器添加到DB1中的表中。
ALTER TRIGGER [dbo].[tr_UPDATE_DB2TABLE]
ON [DATA1DB].table1
AFTER UPDATE
AS BEGIN
SET NOCOUNT ON;
UPDATE DATA2DB.table2
SET [DATA2DB].table2.address= [DATA1DB].table1.address,
[DATA2DB].table2.color = [DATA1DB].table1.color,
FROM [DATA2DB].table2
INNER JOIN Inserted I ON I.Id = [DATA1DB].table1.Id
INNER JOIN [DATA1DB].table1 ON [DATA2DB].table2.id = [DATA1DB].table2.id
where LTRIM(RTRIM([DATA1DB].table1.model)) = LTRIM(RTRIM(I.model))
END
每次DB1中的表更新时,都会更新DB2中的表。
答案 1 :(得分:0)
花点时间了解您的问题是什么... 如果我理解正确,那么您想使用@id =('1,3,4')
执行过程然后,您要获取每个单个ID(1、3和4),并使用table1中的值对每个ID运行更新。如果这一切正确,您的sp可能如下所示:
ALTER PROCEDURE [dbo].[updateMultiple] @id VARCHAR(5)
AS
BEGIN
DECLARE @single_id INT;
DECLARE my_cursor CURSOR
FOR SELECT value
FROM STRING_SPLIT(@id, ',')
WHERE RTRIM(value) <> '';
OPEN my_cursor;
FETCH NEXT FROM my_cursor INTO @single_id;
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE [db2]
SET
[db2].[address] = [db1].[address],
[db2].[color] = [db1].[color]
-- declare @id varchar(5) = (1,3,4);Select *
FROM [data2db] [db2]
JOIN [data1db] [db1] ON [db2].[id] = [db1].[id]
WHERE [db1].[id] = @single_id;
FETCH NEXT FROM my_cursor INTO @single_id;
END;
CLOSE my_cursor;
DEALLOCATE my_cursor;
END;
GO
您需要将输入字符串分割成每个单独的ID,然后执行更新。
这是可能的,但可能不是最好的方法...只是说...
希望有帮助。
PS:在我的示例中,我在同一个数据库中使用了两个表,但是它也应该在两个不同的数据库上工作。
编辑:或者它甚至可以在没有光标的情况下工作:
ALTER PROCEDURE [dbo].[updateMultiple] @id VARCHAR(5)
AS
BEGIN
UPDATE [db2]
SET
[db2].[address] = [db1].[address],
[db2].[color] = [db1].[color]
--declare @id varchar(5) = '1,3,4';Select *
FROM [data2db] [db2]
JOIN [data1db] [db1] ON [db2].[id] = [db1].[id]
WHERE [db1].[id] IN
(
SELECT value
FROM STRING_SPLIT(@id, ',')
WHERE RTRIM(value) <> ''
);
END;
GO