你从根本上想做什么?为什么这是你选择这样做的方式?看来您对基于集合的逻辑的理解有些模糊。其他海报提供的每个答案都是有效的并且会起作用,但可能不是最适合您的目的。此处理是否针对现有数据集?它是数据加载或插入过程的一部分吗?您列出的每个 ID 字段都有自己的唯一值范围。根据您的示例,您真正想要做的是在 ID2 = 1 时更新 bool 值
UPDATE table_name SET Bool = 'T'
WHERE Id2 = 1
您更有可能想要开发一个基于某些数据规则设置 Bool 值的逻辑 - 例如,如果 Id2 小于或等于 Id1。案例陈述在这里有效:
UPDATE table_name SET Bool = CASE WHEN Id1 > Id2 THEN 'T' ELSE 'F' END
当您处理大量数据时,这比在 WHERE 子句中为您插入的每个值的变体写入 AND/OR 规则要高效得多。
将 WHERE 视为过滤器,而不是实现 if/then 类型逻辑的地方。
在小型数据插入中(您可以手动在表字段中键入值,或者从某种 Web 表单事务中逐个事务插入),最简单的方法可能是手动设置您认为合适的值,或者将其构建到程序部分您的系统并将验证规则应用于表。
如果您想编写一个执行此操作的存储过程,您可以为 ID 值创建变量并将这些变量链接到将外部信息传输到数据库系统的任何系统。(我假设您已经创建了表结构);
CREATE PROCEDURE table_name_insert
@Id1 Int NOT NULL,
@Id2 Int NOT NULL
-- If you want to execute the logic outside of the DB environment
-- (perhaps as part of an SSIS package) then you will want to add this
-- variable and pass it in explicitly.
, @Bool bit NOT NULL
AS
DECLARE @sql nvarchar(4000)
SET @sql = '
INSERT INTO table_name (ID1, ID2, Bool)
SELECT @Id1, @Id2, [Case Logic or Variable Value for Bool]
' EXEC sp_executeSQL @sql
这个过程可以由您的程序调用,您可以将可能从数组生成的变量传递给它。还有一些方法可以将值直接导入适当的列,然后在插入后代码中执行 Bool 逻辑。“硬编码”处理每个案例的 WHERE 语句效率低下,并且是一个坏习惯。