OVH Cloud OVH Cloud

updated_columns()

2 réponses
Avatar
Christophe
hello,

je m'arrache les cheveux ....
je comprends pas bien (voir pas du tout) le processus pour recuperer apres
un updated_columns()

en fait le trigger stock ce champ.

mais apres j'aimerais faire passer un process, qui me donne la lis-te des
champs concernés
varbiny data, colone , nom_colone
XXXXX, , 1,3,7, Nom, calculs, Titre



j'ai trouvé pleisn d'infos mais quand on sait quels champs sont suceptible
d'etre changés ??
un piste avant que je soit chauve ?

2 réponses

Avatar
Rudi Bruchez
Christophe a écrit:

je comprends pas bien (voir pas du tout) le processus pour recuperer apres
un updated_columns()



Bonjour,

En faisant quelque chose comme ceci (qui prend en compte les cas au-dessus
de huit colonnes) :

SELECT COLUMN_NAME, ORDINAL_POSITION
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME='matable'
AND (SUBSTRING(COLUMNS_UPDATED(), (ORDINAL_POSITION-1) / 8 + 1, 1) &
POWER(2, (ORDINAL_POSITION-1) % 8)) <> 0


Attention, ceci n'est valable que pour SQL Server 2000 ! Voir l'aide en
ligne de SQL Server 2005 sous COLUMNS_UPDATED() pour la solution dans ce
cas.

Tu peux trouver d'autres exemples de façon de faire ici :
http://www.codecomments.com/message406163.html


--
Rudi Bruchez
Consultant indépendant
modélisation, administration, optimisation,
Solutions MS SQL Server et informatique libre.
MCDBA, SCJP2
http://www.babaluga.com/
Avatar
Christophe
bon voila la solution que j'ai pour le moment !
c'est grave compliquée mais au moins ca marche y'a pas moyen de faire plus
simple pour recuperer le nom des champs ?
Ch.

DECLARE @x varbinary,
@Cols varchar(8000)

SET @x = columns_updated()
SET @Cols = ''

SELECT @Cols = @Cols + name + ','
FROM syscolumns
WHERE id = OBJECT_ID(@tblname)
AND colid IN
(SELECT TOP 100 PERCENT x.num
FROM
(SELECT (a.number * 256 + b.number) AS Num,
CASE (a.number * 256 + b.number) % 8
WHEN 0 THEN ((a.number * 256 + b.number) - 1) / 8
ELSE (a.number * 256 + b.number) / 8
END + 1 AS r,
POWER(2, CASE (a.number * 256 + b.number) % 8
WHEN 0 THEN 8
ELSE (a.number * 256 + b.number) % 8
END - 1) AS a18
FROM master..spt_values a,
master..spt_values b
WHERE a.type = 'p'
AND b.type = 'p'
AND (a.number * 256 + b.number) BETWEEN 1 AND 32767) x
WHERE (SUBSTRING(@x, r, 1) & a18) = a18
ORDER BY x.num)

SET @Cols = left(@Cols, len(@Cols)-1)



"Christophe" a écrit dans le message de
news:
hello,

je m'arrache les cheveux ....
je comprends pas bien (voir pas du tout) le processus pour recuperer apres
un updated_columns()

en fait le trigger stock ce champ.

mais apres j'aimerais faire passer un process, qui me donne la lis-te des
champs concernés
varbiny data, colone , nom_colone
XXXXX, , 1,3,7, Nom, calculs, Titre



j'ai trouvé pleisn d'infos mais quand on sait quels champs sont suceptible
d'etre changés ??
un piste avant que je soit chauve ?