| .. | ||
| README.md | ||
Table of Contents
Transact-SQL
begin transaction
begin transaction
-- ...insert or whatever...
commit; -- if all ok
rollback; --if not ok
Check if a List of numbers exist in a table:
-- declare array
DECLARE @IDList TABLE (ID INT);
-- fill array
INSERT INTO @IDList (ID)
VALUES (274), (7238), (7546), (7719), (36227);
-- create table with id and exists/not exist
SELECT l.ID, CASE WHEN vv.OBJ_ID IS NOT NULL THEN 'Exists' ELSE 'Does Not Exist' END AS Status
FROM @IDList l
LEFT JOIN VAL vv ON l.ID = vv.OBJ_ID;
Mehrere Zeilen zusammen in 1 Zeile mergen
Annahme:
- Tabelle hat Spalten OBJ_ID, VAL_TEXT, FLD_ID
- OBJ_ID hat mehrere Einträge, mit unterschiedlichen Werten in VAL_TEXT und FLD_ID. Halt je nach Feld andere Feldwerte.
- Ich möchte eine Query, die mir 1 Zeile pro OBJ_ID ausgibt, mit 1 Spalte "url" und 1 Spalte "Name"
- "url" ist in VAL_TEXT mit FLD_ID xy (in diesem Bsp. egal) enthalten
- "name" ist in VAL_TEXT mit FLD_ID 40414 enthalten
- Bei der Query soll nur die OBJ_ID berücksichtig werden, die in einem VAL_TEXT "%wikidata%" drin hat
WITH CTE_Wikidata AS (
-- Sammle alle OBJ_IDs, bei denen VAL_TEXT "wikidata" enthält
SELECT OBJ_ID, VAL_TEXT AS url
FROM VAL
WHERE VAL_TEXT LIKE '%wikidata%'
),
CTE_Person AS (
-- Sammle alle OBJ_IDs, bei denen FLD_ID = 240414 und die in CTE_Wikidata existieren
SELECT v.OBJ_ID, v.VAL_TEXT AS person
FROM VAL v
INNER JOIN CTE_Wikidata wd ON v.OBJ_ID = wd.OBJ_ID
WHERE v.FLD_ID = 40414
)
SELECT
wd.OBJ_ID,
wd.url,
p.person
FROM CTE_Wikidata wd
LEFT JOIN CTE_Person p ON wd.OBJ_ID = p.OBJ_ID;