Co zasadniczo próbujesz zrobić? Dlaczego tak właśnie wybrałeś? Wygląda na to, że jesteś trochę rozmyty w zrozumieniu logiki opartej na zestawach. Każda z odpowiedzi dostarczonych przez inne plakaty jest ważna i będzie działać, ale może nie być najodpowiedniejsza dla twojego celu. Czy to przetwarzanie odbywa się w oparciu o istniejący zestaw danych? Czy jest to część procesu ładowania danych lub wstawiania? Każde z wymienionych pól ID ma własny zakres unikalnych wartości. Opierając się na przykład okaże się, że to, co jesteś naprawdę chce zrobić jest zmiana wartości bool gdy ID2 = 1
UPDATE table_name SET Bool = 'T'
WHERE Id2 = 1
Bardziej prawdopodobne jest to, chcąc rozwijać logiki, który ustawia wartość Bool w oparciu o jakiś danych rule - na przykład jeśli Id2 jest mniejszy niż lub równy Id1. Oświadczenie przypadek pracuje tutaj:
UPDATE table_name SET Bool = CASE WHEN Id1 > Id2 THEN 'T' ELSE 'F' END
To jest o wiele bardziej efektywne, gdy masz do czynienia z dużymi zestawami danych niż pisanie i/lub zasady w klauzuli WHERE dla każdego zmienności wartości włożeniu.
Wyobraź sobie GDZIE jako filtr, a nie miejsce do implementacji, jeśli/to wpisz logikę.
W małych wstawkach danych (ręcznie wpisujesz wartości do pól tabeli, wstawiasz z jakiejś formy transakcji internetowej według transakcji) najprawdopodobniej najprościej jest po prostu ręcznie ustawić wartość według własnego uznania lub zbudować ją część proceduralną twojego systemu i zastosuj regułę walidacji do tabeli.
Jeśli chcesz zapisać procedurę zapisaną w bazie, utwórz zmienne dla wartości identyfikatorów i połącz je z dowolnym systemem, który przesyła informacje zewnętrzne do systemu bazy danych. (Zakładam, że już utworzyłeś struktury stołów);
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
Ten proces może zostać wywołany przez twój program i przekazać do niego zmienne, które możesz wygenerować z tablicy. Istnieją również sposoby, w których można importować wartości bezpośrednio do odpowiedniej kolumny, a następnie wykonać logikę Bool w kodzie po włożeniu. "Twarde kodowanie" stwierdzenie WHERE, aby poradzić sobie z każdym przypadkiem, jest nieefektywne i ma zły nawyk.
Jaką bazę danych używasz? –