PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Forums Hébergement > Forum Hébergement serveur > comp.db.ms-sqlserver > Triggers and Flag bit
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
Triggers and Flag bit

Réponse
 
LinkBack Outils de la discussion
Vieux 24/03/2008, 22h14   #1
Sharif Islam
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Triggers and Flag bit

I have a perl script (uses sql query) that will run if there is any
update in the row. Currently, I am a trigger that sets the DateModified
field with getdate() Then my perl script looks for certain range of
modified dates and runs the necessary query.

I am trying to come up with a different mechanism where I don't have to
use the date field. I am looking into flag bits. But not sure how
to use it.

Should I create a trigger that will set the flag bit after any update?
This way the script will just look for the updated records, regardless
of what time it was updated. Maybe I am misunderstanding flag bits, then
after another subsequent update how would the perl/sql script know which
records were updated? I hope this make sense.

thanks.

--s
  Réponse avec citation
Vieux 24/03/2008, 22h53   #2
Erland Sommarskog
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Triggers and Flag bit

Sharif Islam (mislam@spam.uiuc.edu) writes:
> I have a perl script (uses sql query) that will run if there is any
> update in the row. Currently, I am a trigger that sets the DateModified
> field with getdate() Then my perl script looks for certain range of
> modified dates and runs the necessary query.
>
> I am trying to come up with a different mechanism where I don't have to
> use the date field. I am looking into flag bits. But not sure how
> to use it.
>
> Should I create a trigger that will set the flag bit after any update?
> This way the script will just look for the updated records, regardless
> of what time it was updated. Maybe I am misunderstanding flag bits, then
> after another subsequent update how would the perl/sql script know which
> records were updated? I hope this make sense.


There are a couple of alternatives. Which version of SQL Server are you
using? If you use SQL 2005, Query Notification is an interesting
alternative. Your Perl script would issue a query, and then wait until
the result set changes. Of course, this presumes that you use an API
that supports Query Notification, but Win32::SqlServer, available from
my web site on http://www.sommarskog.se/mssqlperl/index.html does.

Another alternative is to use a timestamp column. A timestamp column
in SQL Server has nothing do with date and time, but is automatically
updated each time a row is updated with a database-unique value that
grows monotonically. Thus, the Perl script could look at the timestamp
column and save the latest value as a high-water mark. This would at
least save you the trigger.

I don't believe in flag bits. In this case, the Perl script would have
to flip them back, and that's more complex.


--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/pro...ads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinf...ons/books.mspx
  Réponse avec citation
Vieux 25/03/2008, 17h22   #3
Sharif Islam
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Triggers and Flag bit

Erland Sommarskog wrote:
> Sharif Islam (mislam@spam.uiuc.edu) writes:
>> I have a perl script (uses sql query) that will run if there is any
>> update in the row. Currently, I am a trigger that sets the DateModified
>> field with getdate() Then my perl script looks for certain range of
>> modified dates and runs the necessary query.
>>
>> I am trying to come up with a different mechanism where I don't have to
>> use the date field. I am looking into flag bits. But not sure how
>> to use it.
>>
>> Should I create a trigger that will set the flag bit after any update?
>> This way the script will just look for the updated records, regardless
>> of what time it was updated. Maybe I am misunderstanding flag bits, then
>> after another subsequent update how would the perl/sql script know which
>> records were updated? I hope this make sense.

[...]
>
> Another alternative is to use a timestamp column. A timestamp column
> in SQL Server has nothing do with date and time, but is automatically
> updated each time a row is updated with a database-unique value that
> grows monotonically. Thus, the Perl script could look at the timestamp
> column and save the latest value as a high-water mark. This would at
> least save you the trigger.


Thanks, the timestamp solution seems feasible. I am little confused on
how to use it.

According to the documentation SELECT @@DBTS should return the records
that were just updated or modified. After some updated, when I ran the
select statement, I am getting all the rows. Is there anything else I
need to do? When I created the field I just assigned the data type,
didn't include any default vaule (using MSSQL 2005).

--s
  Réponse avec citation
Vieux 25/03/2008, 21h09   #4
--CELKO--
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Triggers and Flag bit

>> I am trying to come up with a different mechanism where I don't have to use the date field [sic: columns are not fields]. I am looking into flag bits. <<

All that will do is destroy data you have collected. Just use the
date.
  Réponse avec citation
Vieux 25/03/2008, 23h35   #5
Erland Sommarskog
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: Triggers and Flag bit

Sharif Islam (mislam@spam.uiuc.edu) writes:
> Thanks, the timestamp solution seems feasible. I am little confused on
> how to use it.
>
> According to the documentation SELECT @@DBTS should return the records
> that were just updated or modified. After some updated, when I ran the
> select statement, I am getting all the rows. Is there anything else I
> need to do? When I created the field I just assigned the data type,
> didn't include any default vaule (using MSSQL 2005).


Not sure what you mean here, as SELECT @@DBTS returns a single value.
Probably you ran some other query, but as I don't see it, I can't say
what's wrong with it. :-)

Rather than using @@DBTS, min_active_rowversion() is a better choice.
This function was added in SP2, and it was added to Books Online as late
in the September 2007 edition (see my signature for download link). Looking
at @@dbts can cause some issues when there are uncommitted transaction.


--
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se

Books Online for SQL Server 2005 at
http://www.microsoft.com/technet/pro...ads/books.mspx
Books Online for SQL Server 2000 at
http://www.microsoft.com/sql/prodinf...ons/books.mspx
  Réponse avec citation
Vieux 31/03/2008, 02h19   #6
Sharif Islam
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: min_active_rowversion ( was Re: Triggers and Flag bit)

Erland Sommarskog wrote:
> Sharif Islam (mislam@spam.uiuc.edu) writes:
>> Thanks for the . Here's how I am using it. I created a column 'Flag'
>> with timestamp datatype.
>>
>> ------
>>
>> declare @before timestamp
>> declare @after timestamp
>> set @before= min_active_rowversion() -1
>> update MyTable set MyCol ='Test' where MyCol like 'Test123%'
>> set @after = min_active_rowversion() -1
>>
>> select ID,MyCol from MyCol where Flag -1 < @after
>> and Flag -1 >= @before
>> -----
>> This gave me the list of record ID that was just changed. Is this the
>> way to use min_active_rowversion()?

>
> Hm, not really.
>
> Your Perl script would run a batch like:
>
> DECLARE @new_highwater_mark rowversion
> SELECT @new_highwater_mark = min_active_rowversion()
>
> SELECT ID, MyCol, @new_highwater_mark
> FROM tbl
> WHERE tstamp >= @last_highwater_mark AND
> tstamp < @new_highwater_mark
>
> That is, the Perl script needs to remember @new_highwater_mark, and pass
> it as @last_highwater_mark next time.
>
> It's important to capture min_active_rowversion() into a variable, because
> it could change while the query is running, which could lead to lost
> updates.
>
>

Got it! Thanks a lot.
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 12h38.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,16864 seconds with 14 queries