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 而不是intdeclare @B1 datBlob。确保 DB1DB2 是当前数据库。

以上是关于T SQL:交换不同表中相同类型的两个值的主要内容,如果未能解决你的问题,请参考以下文章

SQL server 如何查找库中两个表中是不是包含相同的信息?

如何对比两个相同数据库表的不同

连接两个不同表中具有相同 UnitOfMeasureId 的行

在 Oracle PL/SQL 中,当列的其余值相等时,我可以交换表中两个不同行的同一列的值吗?

T-SQL中向表中插入一条数据,其中类型为Decimal的列对应的插入值为‘2400’可就是不行还报“......

从两个表中,把不同类型的字段查询连接在一起