T SQL:交换不同表中相同类型的两个值
Posted
技术标签:
【中文标题】T SQL:交换不同表中相同类型的两个值【英文标题】:TSQL: Swap two values of the same type in diffrent tables 【发布时间】:2012-05-20 11:35:49 【问题描述】:我在不同的表中有两个自定义类型的值:DB1.TBL1.Val 和 DB2.TBL2.Val。是否可以将这些交换为值?这两个值是同一个类型的,这个类型是datBlob。
再一次:我的数据库 DB1 和表 TBL1 包含许多记录和一些字段,包括 Val。假设我确定了保证这两个返回的行是正确的条件。其他数据库 DB2 也是如此。我想交换这两个值。
换句话说,我想要类似的东西
UPDATE DB1.TBL1 SET Val=(SELECT Val FROM DB2.Tbl2.Val WHERE MyGUID='WOW') WHERE MyGUID='Wow'
【问题讨论】:
您必须以某种方式识别行,这两个值在哪里。或者您想“交换”这 2 列中的所有值? 所以?我可以识别例如:SELECT DB1.TBL1.Val WHERE OtherUniqueval='Some GUID' 【参考方案1】:没有神奇的值交换。您必须编写代码才能完成这项工作。下面的代码显示了如何。您必须适应数据类型、表名等以及如何找到需要更新的行。
-- Value from DB1
declare @B1 as int
-- Value from DB2
declare @B2 as int
-- Get value from DB1
select @B1 = Val
from DB1.dbo.TBL1.Val
where ID = 1
-- Get value from DB2
select @B2 = Val
from DB2.dbo.TBL2.Val
where ID = 1
-- Update value in DB1
update DB1.dbo.TBL1
set Val = @B2
where ID = 1
-- Update value in DB2
update DB2.dbo.TBL2
set Val = @B1
where ID = 1
【讨论】:
好的,如果我的字段是 datBlob 类型,而不是 int,我应该声明什么?datBlob
的定义是什么?
我不能保证,但我怀疑这是二进制 BLOB。但是 DECLARE @val binary dows 不起作用。
如果您有一个名为datBlob
的user-defined type,那么您可以在声明变量时使用datBlob
而不是int
。 declare @B1 datBlob
。确保 DB1
或 DB2
是当前数据库。以上是关于T SQL:交换不同表中相同类型的两个值的主要内容,如果未能解决你的问题,请参考以下文章
SQL server 如何查找库中两个表中是不是包含相同的信息?
连接两个不同表中具有相同 UnitOfMeasureId 的行
在 Oracle PL/SQL 中,当列的其余值相等时,我可以交换表中两个不同行的同一列的值吗?