Archive for August, 2009

Triggers are stored procedures which are fired when data is modified in an underlying table. They can evaluate data being added to a table for validation purposes, or can make changes in that or other fields depending on the value of that data. You can use them even to execute a separate stored procedure, or to roll back a data modification or an entire transaction.

In earlier versions of SQL Server, triggers were used to maintain referential integrity. In current versions, constraints and foreign keys are used to accomplish much of those tasks, but triggers are still used to accomplish more complex tasks than that are available to the built in newer tools, such as complex column constraints, evaluation of tables in other databases, complicated defaults, or cascading routines involving multiple changes in multiple tables.

Triggers are created in the Enterprise Manager, or in the Query Analyzer through the object browser. There are also templates for triggers in the Query Analyzer (Edit|Insert Trigger). Triggers can be created with the following syntax:

CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] }
[ WITH APPEND ]
[ NOT FOR REPLICATION ]
AS
[ { IF UPDATE ( column )
[ { AND | OR } UPDATE ( column ) ]
[ ... n ]
| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask )
{ comparison_operator } column_bitmask [ ... n ]
} ]
sql_statement [ ... n ]
}
}

There are two types of triggers: AFTER and INSTEAD OF. After triggers AFTER TRIGGERS fire after the data is changed, either by insert, delete, or update. If the data is inappropriate, as defined in the trigger, the modification can be rolled back to where it was before the data was modified. After triggers AFTER TRIGGERS cannot be placed on views, and cannot be used on more than one table. Also, the text, ntext, and image columns cannot be referenced in an after trigger. AFTER TRIGGERS.

After triggers AFTER TRIGGERS can be nested to 32 levels deep, and can be called recursively, again to 32 levels.

Instead of INSTEAD OF triggers make the validation before the modification. However, Instead of INSTEAD OF triggers CAN can be used on views. They do not allow recursion, and you can only have one Instead of INSTEAD OF trigger per table. And you cannot use an Instead of INSTEAD OF trigger with a cascade.

Resources

Professional SQL Server 2005 CLR Programming: with Stored Procedures, Functions, Triggers, Aggregates and Types

MICROSOFT SQL SERVER 2008 A BEGINNER’S GUIDE 4/E

Tutorial On SQL Datatypes

SQL Server requires that each variable and column in a table should be defined with respect to the type of data it will store. From a bit to a huge image and binary storage types, the allocation is supposed to help the user conform to the data required, and help the engine allocate space and processing speed efficiently.

Built-in data types

SQL Server 2000 recognizes the following built in data types:

bigint
Integer data from -2^63 through 2^63-1

int
Integer data from -2^31 through 2^31 – 1

smallint
Integer data from -2^15 through 2^15 – 1

tinyint
Integer data from 0 through 255

bit
Integer data with either a 1 or 0 value

decimal
Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1

numeric
Fixed precision and scale numeric data from -10^38 +1 through 10^38 -1

money
Monetary data values from -2^63 through 2^63 – 1

smallmoney
Monetary data values from -214,748.3648 through +214,748.3647

float
Floating precision number data from -1.79E + 308 through 1.79E + 308

real
Floating precision number data from -3.40E + 38 through 3.40E + 38

datetime
Date and time data from January 1, 1753, through December 31, 9999, with an accuracy of 3.33 milliseconds

smalldatetime
Date and time data from January 1, 1900, through June 6, 2079, with an accuracy of one minute

char
Fixed-length character data with a maximum length of 8,000 characters

varchar
Variable-length data with a maximum of 8,000 characters

text
Variable-length data with a maximum length of 2^31 – 1 characters

nchar
Fixed-length Unicode data with a maximum length of 4,000 characters

nvarchar
Variable-length Unicode data with a maximum length of 4,000 characters

ntext
Variable-length Unicode data with a maximum length of 2^30 – 1 characters

binary
Fixed-length binary data with a maximum length of 8,000 bytes

varbinary
Variable-length binary data with a maximum length of 8,000 bytes

image
Variable-length binary data with a maximum length of 2^31 – 1 bytes

cursor
A reference to a cursor

sql_variant
A data type that stores values of various data types, except text, ntext, timestamp, and sql_variant

table
A special data type used to store a result set for later processing

timestamp
A database-wide unique number that gets updated every time a row gets updated

uniqueidentifier
A globally unique identifier

How to choose the appropriate data type

SQL Server stores data in data pages that are 8Kb (8192 bytes) in size. The system uses some of that s Sometimes, the system uses only 8060 bytes are availableto that are available to store user’s data. Consider the size of a row of data in your tables. If the rows are large, make sure that multiples of the fit conveniently on a data page so that page space is not wasted. This is cut down on disk paging overhead when accessing the data. You want to maximize the number of rows of data which that will fit on a page. This can be accomplished both by splitting the tables, and by choosing the smallest data type which that will accommodate your data. .

If you are using integer data, data; consider that the tinyint datatype will accommodate data which that will fit into one byte of storage. So if the range of all of the data in your field (or variable) is between 0 and 255, use the tinyint datatype. If the range is between -32,768 and 32,767, use the smallint data type. And if If you need to store integer data from -2,147,483,648 through 2,147,483,647, use int data type.

Similarly with smallmoney. If smallmoney. if your value range is between -214748.3648 and 214,748.3647, use the smallmoney datatype.

Use smalldatetime data type instead of datetime data type, if you need to store the date and time data from January 1, 1900 through June 6, 2079, with accuracy to the minute.

Prefer varchar.nvarchar to text/ntext whenever possible because the text and image fields are stored separately, which produces additional paging. And prefer char/varchar to nchar/nvarchar data types because the n types require twice as much storage space. The n types are used primarily for unicode data.

SQL Math Functions

The following is a reference to the main math functions in SQL:

ABS(X) Absolute value-converts negative numbers to positive, or leaves positive numbers alone
CEIL(X) X is a decimal value that will be rounded up.
FLOOR(X) X is a decimal value that will be rounded down.
GREATEST(X,Y) Returns the largest of the two values.
LEAST(X,Y) Returns the smallest of the two values.
MOD(X,Y) Returns the remainder of X / Y.
POWER(X,Y) Returns X to the power of Y.
ROUND(X,Y) Rounds X to Y decimal places. If Y is omitted, X is rounded to the nearest integer.
SIGN(X) Returns a minus if X < 0, else a plus.
SQRT(X) Returns the square root of X.

Q: What is normalization?

A: Normalization is a technique of database design that minimizes the amount of redundancy in the database tables. This is accomplished by laying out tables (mainly columns and key fields) in a manner that reduces the amount of duplicate data being stored in the tables. When people talk about normalization, you will hear them talk about forms. This article will talk about the first 3 forms. To learn more about forms and database design practices the following books are great references Database Design for Mere Mortals or Beginning Database Design.

First Normal Form
This form refers to classifying data into seperate tables where that data in each table is of similar type and giving each table a primary key.

Second Normal Form
This form involves removing to other tables data that is only dependent on a part of the key. As with the definition of database normalization, you are trying to reduce redundancy. Here is an example: If you have two tables – authors and books, you do not want to put the author’s address in both tables. If you need the author’s address in the books table, you would only put a reference to the primary key for the author from the Authors table in the Books table. This way, you will be able to use all of the information about the author without having to maintain it in more than one place.

Third Normal Form
This form involves getting rid of anything in the tables that does not depend solely on the primary key. Only include information that is dependent on the key and move off data to other tables that are independent on the primary key and create primary key for the new tables.

Normalization is crucial to good database design, but it is not necessary to normalize all of the way to the third or fourth form for every database that you create. Use common sense and use the amount of normalization that the situation calls for and the amount that you feel comfortable with.

sp_columns table name

Get Adobe Flash playerPlugin by wpburn.com wordpress themes