|
* What does Global.Instance.Trigger_Query actually evaluate to? (Not what it should evaluate to, but what it really contains)
* What does Global.Instance.Field_Name actually contain? (Not what it should have, but what it really contains)
* Ditto for Global.Instance.Table_Name and val
What do you do with this string once you have it? I presume this is part of some C# code somewhere. If that is wrong please say.
GO is not part of T-SQL. It is a batch delimiter used by Query Analyzer.
|
|
|
|
|
All the "Global.s"... have string values in them.
Global.Instance.Field_Name has the field name on which the trigger is to be applied.
Global.Instance.Table_name contains the name of the table
val contains an integer number.
Global.Instance.Trigeger_Query contains the mapped create trigger query.
what i'm trying to do is store the trigger query in a string type varible and then execute the mapped query through the ExecuteNonQuery() method.
i've used the same tehnique to map Create Table and Alter Table and Delete table queries and they worked fine.
|
|
|
|
|
Saira Tanwir wrote: All the "Global.s"... have string values in them.
Specifically, what values. You are injecting values in to a SQL String. Any of those values can cause it fail if the values are not sufficiently sanitised correctly.
Saira Tanwir wrote: Global.Instance.Trigeger_Query contains the mapped create trigger query.
Specifics. What EXACTLY does it contain. What does the expression evaluate to? What is the exact contents of the value.
Saira Tanwir wrote: what i'm trying to do is store the trigger query in a string type varible and then execute the mapped query through the ExecuteNonQuery() method.
Mapped to what? As far as I can see it is just a query that does not have a result set. Without a result set there is nothing to map to.
You need to debug what is going on to see that the actual query that is produces is a valid one.
|
|
|
|
|
okay
the query string is
CREATE TRIGGER emp_id_trg ON employee FOR INSERT AS emp_id < 25
this is what the trigger should do at insertion time.
the error i get is
INcorrect syntax near ON
does this help
|
|
|
|
|
Saira Tanwir wrote: this is what the trigger should do at insertion time
What do you expect it to do? I don't see it doing anything. You have a conditional expression, that's it. If the condition is true what is supposed to happen? If the condition is false what is supposed to happen?
|
|
|
|
|
its quiet simple really
if the condition is true then insertion and updation should take place other wise an error message should be displayed.
that is however not the not the question. the question is as i mentioned earlier " Am i applyinf the correct syntax for this or not" cause if the syntax is correct the query is always executed no matter what u try to do in it.
my problem is the query i'm trying to execute does not ecexute at all.
Can u please give me an example query in which a user tries to create a trigger that works like this i.e
suppose, there is an attribute of salary. now the trigger against it the attribute is that whenever a salary amount is entered, a check should be applied checking that the salary is not more than a 6 digit number.
plz do send me a create trigger query through which the above task can be implemented
|
|
|
|
|
Saira Tanwir wrote: that is however not the not the question
Actually it is the question. You have a conditional expression and the syntax error is that you have not completed it. You set up the condition, but don't say what happens what happens when the condition is met.
Saira Tanwir wrote: my problem is the query i'm trying to execute does not ecexute at all.
You don't have even a query - You have only part of a conditional expression. It can't do anything because you've not told it what to do.
Saira Tanwir wrote: suppose, there is an attribute of salary. now the trigger against it the attribute is that whenever a salary amount is entered, a check should be applied checking that the salary is not more than a 6 digit number.
I'm assuming that by attribute you mean a column called salary.
CREATE TRIGGER emp_id_trg
ON employee
FOR INSERT
AS
DECLARE @salary int;
SELECT @salary = salary FROM inserted;
IF @salary >= 1000000
BEGIN
-- Do stuff here - the salary is greater than 6 digits
END
|
|
|
|
|
:->
can u also please elaborate the functionality of
DECLARE @salary int;<br />
SELECT @salary = salary FROM inserted;
what is 'FROM inserted'?
|
|
|
|
|
First to DECLARE a variable by the name of @salary and define it as an integer.
Then to SELECT the value from the salary column in the inserted table (a virtual table provided inside the trigger that contains all the inserted data)
|
|
|
|
|
Actually, you are probably better with some sort of constraint.
Set up the rule:
CREATE RULE validSalary AS @salary <1000000;
Bind the rule to the column:
EXEC sp_bindrule 'validSalary', 'Employee.Salary'
|
|
|
|
|
re Rules substitutes for triggers??
what i mean is that Triggers can be applied for three different operations i.e. for INSERT, DELETE and UPDATE
can rule be used likewise??
|
|
|
|
|
Saira Tanwir wrote: re Rules substitutes for triggers??
It isn't a substitute. But it seem to me that what you want in this instance is a rule. Not a trigger.
A trigger says "here are some additional actions to perform when something happens" a rule says "in order to allow this to happen, you must satisfy my condition"
A rule is applied on a column. It will be checked when data is inserted or updated. A rule cannot have an effect on a delete.
|
|
|
|
|
okay
then the validation rules that are applied on a column in MS Access(if u've worked in it) are at the backend Triggers or Rules? cause trying to do something similr to that an it would be a help if u would clear my concepts too.
|
|
|
|
|
No idea - I thought we were talking about SQL Server. I don't use Access.
|
|
|
|
|
Don't worry, we still are using Sql Server i just asked perchance
thanks a lot for the great help
until next time
Regards
Saira
|
|
|
|
|
When should I go for query & when should I prefer SP? For example, we can wrap a simple select query inside an SP . Is it a better way? Any technical advanatages by using a particular method? I'm asking just for optimizing my app.
*
|
|
|
|
|
General rule: Go for a query when you are doing something quick and dirty. Go for a stored procedure in all other circumstances.
|
|
|
|
|
SPs are the best for your db an sql: 1) less traffic on your network 2) best performance on your db 3) encapsulation and security are easier to manage.
|
|
|
|
|
Am retrieving data from my databese engine to read the data, but encountering an error at dr.Read(), con.close()
string connection=@" ";
SqlConnection con = new SqlConnection(connection);
SqlCommand cmd = new SqlCommand("select * from employee",con);
SqlDataReader dr = cmd.ExecuteReader();
dr.Read();
con.Close();
"Invalid token '(' in class, struct, or interface member declaration", what could be the reason for this?
-- modified at 18:57 Friday 9th February, 2007
|
|
|
|
|
sreecahitu wrote: Invalid token '(' in class, struct, or interface member declaration
I don't know why that error occurs. There is not enough information given.
However, I can point out other problems with the code.
1. The connection string is empty (although I'm guessing you removed it for security)
2. You never open the connection.
3. You read from the database but you never check if anything exists, and if it does exist you never actually get the data.
|
|
|
|
|
Hello everyone
I wanted to ask if we can update the column values automatically?
my requirement is a particular column value of a table should get changed when the system time is changed
can this be done in T-sql?
Please reply its very urgent thank you
|
|
|
|
|
Ravi Ahuja wrote: my requirement is a particular column value of a table should get changed when the system time is changed
can this be done in T-sql?
Given that the system time is changing continuously, no.
What exactly is your objective? There might be a better way of thinking about the problem.
|
|
|
|
|
my objective say when the system date changes say today is 02/11/2007 so when the date will change to 02/12/2007
the column value should change.
see basically i am working on a ticket reservation project
so when a ticket is issued to a customer his status is set to confirmed or waiting depending upon the situation
and when the train departs than his status must change as departed
|
|
|
|
|
Ravi Ahuja wrote: so when a ticket is issued to a customer his status is set to confirmed or waiting depending upon the situation
and when the train departs than his status must change as departed
And you are saying that a train has departed based on the time, rather than whether the train actually departed or not.... Interesting system...
I suggest you need to find a way to be told that a train actually departed rather than when you expected the train to depart (if at all)
|
|
|
|
|
I have to make questions like this:
CString abfrage;
abfrage = "SELECT kstnr, kststamm.Bezeichnung, karnr, KarBezeichnung, buchungen.ktrnr, KtrBezeichnung, betrag, datum, datenart, belsymbol,\
belnr, text FROM buchungen LEFT OUTER JOIN karstamm ON buchungen.karnr = karstamm.Nummer ";
abfrage = abfrage + "LEFT OUTER JOIN kststamm ON buchungen.kstnr = kststamm.Nummer ";
abfrage = abfrage + " LEFT OUTER JOIN ktrstamm ON buchungen.ktrnr = ktrstamm.KtrNr WHERE datum >= ";
abfrage = abfrage + "'" + kstvon.c_str() + "' AND datum <= '" + kstbis.c_str() + "'";
if (kstnr != "") abfrage = abfrage + " AND kstnr = '" + kstnr.c_str() + "'";
if (koarnr != "") abfrage = abfrage + " AND karnr = '" + koarnr.c_str() + "'";
if (datenart != "") abfrage = abfrage + " AND datenart = '" + datenart.c_str() + "'";
rs->Close();
rs->Open(CRecordset::snapshot, abfrage);
Is there an easier way to make a Select in VC++??
I made this question in the Longe, unforounatly - and my question was even deleted (what's right, wrong click;))
But can anyone help here???
Thanks, Gerhard
|
|
|
|