使用case语句更新位类型列返回null

时间:2017-04-13 13:33:23

标签: sql sql-server tsql bit

这是我的问题(下面将是答案)

我需要根据另一个数据库中另一个表中另一列的条目更新位列。所以我的表结构看起来像:

DB1.Table1 (
field1 int IDENTITY (1,1) PRIMARY KEY
,field2 varchar (50)
,field3 bit

DB2.Table2 (
fieldA int IDENTITY (1,1) PRIMARY KEY
,fieldB varchar (50)
,fieldC varchar (50)

DB2,Table2,fieldC将条目存储为Y或N,我需要在位列DB1,Table1,field3中将其转换为1或0

我写了这段代码来实现这个目标:

USE DB1
GO

UPDATE Table1
SET field3 = field3 - (CASE WHEN [fieldC] = 'Y' THEN 1 ELSE 0 End)
FROM Table1
INNER JOIN DB2.Table2 ON fieldA = field1

我会执行,我会收到一条消息,说明有很多记录被更新但是当我检查我的DB1,Table1,field3时,一切都是NULL。

我看了这段代码一天半。请参阅下面的我对这个问题的答案。

2 个答案:

答案 0 :(得分:0)

问题不在于代码。位列没有默认设置,我发现这会导致一些问题,比如这个问题。一旦我更改了表结构以设置位列的默认值,代码就可以正常工作。

答案 1 :(得分:0)

使用布尔逻辑写入位

set field3 = fieldC = 'Y'