¿Qué está tratando fundamentalmente de hacer? ¿Por qué es esta la manera en que has elegido hacerlo? Parece que eres un poco confuso en la comprensión de la lógica basada en conjuntos. Cada una de las respuestas proporcionadas por otros carteles es válida y funcionará, pero puede no ser la más adecuada para su propósito. ¿Este procesamiento está en contra de un conjunto de datos existente? ¿Es parte de una carga de datos o proceso de inserción? Cada uno de los campos ID que ha enumerado tiene su propio rango de valores únicos. Sobre la base de tu ejemplo, parece que lo que está realmente querer hacer es actualizar el valor bool cuando ID2 = 1
UPDATE table_name SET Bool = 'T'
WHERE Id2 = 1
Lo más probable es que usted está deseando desarrollar una lógica que establece el valor Bool en base a unos datos regla, por ejemplo, si Id2 es menor que o igual a Id1. Una declaración de caso trabaja aquí:
UPDATE table_name SET Bool = CASE WHEN Id1 > Id2 THEN 'T' ELSE 'F' END
Esto es mucho más eficiente cuando se trata de grandes conjuntos de datos de escritura y/o de reglas en su cláusula WHERE para todos y cada variación de los valores de insertar.
Piense en WHERE como un filtro y no como un lugar para implementar si escribe lógica.
En las inserciones de datos pequeños (si escribe valores manualmente en los campos de la tabla, está insertando desde algún tipo de formulario web transacción por transacción) probablemente sea más simple establecer manualmente el valor como mejor considere, o compilarlo en la parte de procedimiento de su sistema y aplicar una regla de validación a la tabla.
Si desea escribir un procedimiento almacenado que lo haga, cree variables para los valores de ID y vincúlelas a cualquier sistema que transmita la información externa en su sistema de base de datos. (Presumiré que ya ha creado las estructuras de tabla);
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
Este proceso puede ser llamado por su programa y transfiere las variables que pueda generar a partir de una matriz. También hay formas en que puede importar los valores directamente a la columna apropiada y luego ejecutar la lógica de Bool en el código posterior a la inserción. "Hard Coding" una declaración WHERE para manejar cada caso es ineficiente, y un mal hábito para entrar.
¿Qué base de datos está usted utilizando? –