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 ?
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/
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 ?
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" <christophe@digital16-9.com> a écrit dans le message de
news:eiy3gDZtGHA.3264@TK2MSFTNGP03.phx.gbl...
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 ?
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 ?