Sql server 在SQL Server中交换表中的列值

Sql server 在SQL Server中交换表中的列值,sql-server,Sql Server,我有问题要解决: 假设数据库中有表TAB1(id、numb、text)。任务是在“text”列中的某个查询上交换“numb”列中的两个列值 例如: 我们有 ID | NUMB | TEXT 1 | 22 | hello <- this record 2 | 25 | today 3 | 34 | wow <- this record 4 | 53 | what 但是这个查询不想执行-弹出错误'Recipient B.numb re

我有问题要解决:

假设数据库中有表TAB1(id、numb、text)。任务是在“text”列中的某个查询上交换“numb”列中的两个列值

例如:

我们有

ID | NUMB | TEXT
 1 |  22  | hello   <- this record  
 2 |  25  | today  
 3 |  34  | wow     <- this record  
 4 |  53  | what  
但是这个查询不想执行-弹出错误'Recipient B.numb repeated'


请给我一些建议。

通常不应在单个查询中尝试此操作,但使用SQL SERVER 2005您可以尝试

DECLARE @TableA TABLE(
        ID INT,
        NUMB INT,
        TEXT VARCHAR(20)
)
 INSERT INTO @TableA SELECT 1,22,'hello'
 INSERT INTO @TableA SELECT 2,25,'today'   
 INSERT INTO @TableA SELECT 3,34,'wow'
 INSERT INTO @TableA SELECT 4,53,'what' 

SELECT  *
FROM    @TableA

;WITH Vals1 AS(
        SELECT  *
        FROM    @TableA
        WHERE   TEXT = 'hello'
),
Vals2 AS(
        SELECT  *
        FROM    @TableA
        WHERE   TEXT = 'wow'
)
UPDATE  @TableA
SET     NUMB = CASE 
                    WHEN t.TEXT = Vals1.TEXT THEN Vals2.NUMB 
                    WHEN t.TEXT = Vals2.TEXT THEN Vals1.NUMB 
                    ELSE t.NUMB 
                END
FROM    @TableA t,
        Vals1,
        Vals2

SELECT  *
FROM    @TableA

通常不应在单个查询中尝试此操作,但可以使用SQLServer2005进行尝试

DECLARE @TableA TABLE(
        ID INT,
        NUMB INT,
        TEXT VARCHAR(20)
)
 INSERT INTO @TableA SELECT 1,22,'hello'
 INSERT INTO @TableA SELECT 2,25,'today'   
 INSERT INTO @TableA SELECT 3,34,'wow'
 INSERT INTO @TableA SELECT 4,53,'what' 

SELECT  *
FROM    @TableA

;WITH Vals1 AS(
        SELECT  *
        FROM    @TableA
        WHERE   TEXT = 'hello'
),
Vals2 AS(
        SELECT  *
        FROM    @TableA
        WHERE   TEXT = 'wow'
)
UPDATE  @TableA
SET     NUMB = CASE 
                    WHEN t.TEXT = Vals1.TEXT THEN Vals2.NUMB 
                    WHEN t.TEXT = Vals2.TEXT THEN Vals1.NUMB 
                    ELSE t.NUMB 
                END
FROM    @TableA t,
        Vals1,
        Vals2

SELECT  *
FROM    @TableA
当numb列是数字时(我从numb列中找到的数据猜测),你如何说“WHERE A.numb='hello'和B.numb='wow'”?当numb列是数字时(我从numb列中找到的数据猜测),你如何说“WHERE A.numb='hello'和B.numb='wow'
DECLARE @TableA TABLE(
        ID INT,
        NUMB INT,
        TEXT VARCHAR(20)
)
 INSERT INTO @TableA SELECT 1,22,'hello'
 INSERT INTO @TableA SELECT 2,25,'today'   
 INSERT INTO @TableA SELECT 3,34,'wow'
 INSERT INTO @TableA SELECT 4,53,'what' 

SELECT  *
FROM    @TableA

;WITH Vals1 AS(
        SELECT  *
        FROM    @TableA
        WHERE   TEXT = 'hello'
),
Vals2 AS(
        SELECT  *
        FROM    @TableA
        WHERE   TEXT = 'wow'
)
UPDATE  @TableA
SET     NUMB = CASE 
                    WHEN t.TEXT = Vals1.TEXT THEN Vals2.NUMB 
                    WHEN t.TEXT = Vals2.TEXT THEN Vals1.NUMB 
                    ELSE t.NUMB 
                END
FROM    @TableA t,
        Vals1,
        Vals2

SELECT  *
FROM    @TableA