webForumDet fria alternativet

SQL Server 2000 och COLUMNS_UPDATED

Databaser & SQL

5 svar · 298 visningar · startad av aasah

Medlem sedan mars 20034 471 inlägg
Frågan#1

Jag förstår hur COLUMNS_UPDATED opererar och fungerar på de första 8 bitarna. Men sedan? Om man vill undersöka tex om kolumn 3, 11 och 15 uppdaterats, hur gör man då?

Skulle gärna se ett förklarande exempel!

Medlem sedan nov. 20014 054 inlägg
#2

aasah skrev:

Jag förstår hur COLUMNS_UPDATED opererar och fungerar på de första 8 bitarna. Men sedan? Om man vill undersöka tex om kolumn 3, 11 och 15 uppdaterats, hur gör man då?

Skulle gärna se ett förklarande exempel!

CREATE TRIGGER updEmployeeData 
ON employeeData 
FOR update AS 
-- Check whether columns 2, 3 or 4 has been updated. If any or 
all of 
-- columns 2, 3 or 4 have been changed, create an audit record. 
-- The bitmask is: power(2,(2-1))+power(2,(3-1))+power(2,(4-1)) = 
14 
-- To check if all columns 2, 3, and 4 are updated, use = 14 in 
place of 
-- >0 (below). 
IF (COLUMNS_UPDATED() & 14) > 0 
-- Use IF (COLUMNS_UPDATED() & 14) = 14 to see if all of columns 2, 3, 
-- and 4 are updated. 
BEGIN 
-- Audit OLD record

Hittat på: http://database.ittoolbox.com/groups/technical-functional/sql-server-l/columns_updated-100440

Kanske kan vara något du kan ha hjälp av?

Medlem sedan mars 20034 471 inlägg
#3

Freddemannen, ditt exempel rör enbart kolumnerna 2, 3, 4 som alla är mindre än 9. :OO

Det jag behöver hjälp med är hur det fungerar för kolumn 9 och uppåt, samt vad som händer om man vill jämföra för mer än en "oktett", tex 3, 11 och 15

Medlem sedan dec. 200012 464 inlägg
#4

Använd 9 bitar eller mer. Nionde kolumnen = 256

sen så kan du kombinera flera columns_updated med and och or

Medlem sedan mars 20034 471 inlägg
#5

LarsG skrev:

Använd 9 bitar eller mer. Nionde kolumnen = 256

Kan du visa ett exempel för högre bitar? Det enda exempel jag har sett, som jag inte förstod, ägnade sig åt att på något vis flytta de 8 tecknen i sidled ...? :q Dvs på något sätt bortsåg man ifrån att det var bit 9-15 och behandlade det som bit 0-8 - fast ändå inte... Min beskrivningen är hemsk för exemplet gick inte hem, det var bara rörigt...

LarsG skrev:

sen så kan du kombinera flera columns_updated med and och or

Åh! Ja, det var ju smart!

Medlem sedan dec. 200012 464 inlägg
#6

Om du vill testa på kolumnera 3, 11, 15 så blir det 2^2 + 2^10 + 2^14 = 17412. Jag har bara läst dokumentationen och där står att man kan ange ett heltal och jag ser inte att det skulle vara begränsat till en tinyint.

252 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)