Basic
Walkthrough SQLServer Part-5
In this part we will study some more useful database objects. For
example VIEWS, TRIGGERS, PROCEDURES and few other.
As we had an introduction to trigger creation in part 2, we will
discuss how we run scripts first. SQLSERVER supports different kind of scripts.
You can run system shell scripts (.bat, .cmd, .js, .vbs,.sh and many
more). Let us try to understand how we
can run scripts. Simple SQL script looks like
C:\Documents
and Settings\user1>sqlcmd –i script.sql |
use sample; Select
Fname,Lname,Phone,Cell from address; select count(*)
from address; |
|
This was a simple SQL script. This is to
be run in sqlcmd command window. The syntax has been indicated in blue.
Being an example script, I just listed few commands. In actual scripts these
lines are usually over hundreds.
C:\Documents
and Settings\user01>sqlcmd –i script.sql -o script.out.txt |
Similarly,
we can use system scripts too for accomplishing same mission. Have a look at
following script. This one is equivalent to the previous one.
C:\Documents
and Settings\user01>Script.bat |
sqlcmd -d
sample -Q “Select Fname,Lname,Phone,Cell from address” sqlcmd -d
sample -Q “select count(*) from address” |
This is very straightforward that we use sqlcmd keyword and removed the
terminator. The scripts are usually written for various tasks including generating
daily reports. As a rule of thumb, add all the commands to script file that are
to be repeated in future and invoke the script using one of above syntaxes.
Let
us create another trigger on TRANS table (created in part 2) to ensure that
user uses in or out keywords only in code column. Using anything else will be
waste of data. So, we will try to reject entry if the code is not set properly.
C:\Documents
and Settings\user01>sqlcmd –td@ -f
TriggerCheckCode.sql |
CREATE TRIGGER
Check_Code ON TRANS FOR INSERT AS declare
@code CHAR(4); set
@code = (select code from inserted); IF (upper(@code)<>'IN' AND
upper(@code)<>'OUT')
RAISERROR('Code
must be either "in" or "out"',20,10); |
This trigger will stop us from entering
wrong ‘Code’ in TRANS table. This is to ensure
that data entered will be usable by the trigger update_total trigger to update
TOTAL tables.
C:\Documents
and Settings\user01>sqlcmd -d sample -Q “select * from total” |
WEEKNUM
INCOME EXPENSE TIMEUPDATE -------
-------- -------- ----------------------- 49
224.20 49.40 2018-12-04
22:25:21.000 (1 rows
affected) |
C:\Documents
and Settings\user01>sqlcmd -d sample -Q “insert into TRANS values (120.00,'Not
IN')” |
Msg 2754, Level 16, State 1, Server XPSQL1\SQLEXPRESS, Procedure
Check_Code, Line 9 Error severity levels greater than 18 can only be specified by members
of the sysadmin role, using the WITH LOG option.The statement has been
terminated. |
C:\Documents
and Settings\user01>sqlcmd -d sample -Q “insert into TRANS values (default,
120.00,'In')” |
(1 rows affected) |
C:\Documents
and Settings\user01>sqlcmd -d sample -Q “select * from total” |
WEEKNUM INCOME EXPENSE TIMEUPDATE ------- -------- -------- ----------------------- 49 344.20
49.40 2018-12-04 23:43:29.500 (1 rows affected) |
Cool,
the transaction was applied to TOTAL table when we entered the correct code.
Remember we had used ‘case free’ iN and OuT key words. It will work with any case.
Let
us try to have some flavor of VIEWS. As
explained earlier the VIEW is combination of columns from different tables. We
will create another table called PERSONS with names of all family members. Then
we will create a view joining TRANS and PERSONS tables to save info about who
had carried out the transaction. For this purpose, we will add a column PID to
TRANS table.
C:\Documents
and Settings\user01>sqlcmd -d sample -Q “alter table TRANS add PID CHAR(2)” |
|
Now
create table PERSONS as below.
C:\Documents
and Settings\user01>sqlcmd -d sample -Q “create table PERSONS (PID CHAR(2) not
null primary key, FNAME CHAR(16), LNAME CHAR(12))” |
|
Add
some data to the table.
C:\Documents
and Settings\user01>sqlcmd -d sample -Q “insert into PERSONS values
(‘00’,’David’,’Boon’)” C:\Documents
and Settings\user01>sqlcmd -d sample -Q “insert into PERSONS values
(‘01’,’Marry’,’Boon’)” C:\Documents
and Settings\user01>sqlcmd -d sample -Q “insert into PERSONS values
(‘02’,’John’,’Boon’)” C:\Documents
and Settings\user01>sqlcmd -d sample -Q “select * from persons” PID FNAME LNAME ---
---------------- ------------ 00 David Boon 01 Marry Boon 02 John Boon (3 rows
affected) |
Now we need to enter
these PID in TRANS table to indicate who carried the transactions out. Let’s do
that.
C:\Documents
and Settings\user01>sqlcmd -d sample -Q “select * from
TRANS” ID AMOUNT CODE
PID ------ -------- ------ --- 0 34.40 out - 1 123.45 in - 2 100.00 in - 3 0.75 in - 4 15.00 out - 6 120.00 In - 6 record(s) selected. C:\Documents
and Settings\user01>sqlcmd -d sample -Q “update TRANS set
PID='00' where ID=0” SQLSERVER0000I The SQL command
completed successfully. C:\Documents
and Settings\user01>sqlcmd -d sample -Q “update TRANS set
PID='01' where ID=1” SQLSERVER0000I The SQL command
completed successfully. C:\Documents
and Settings\user01>sqlcmd -d sample -Q “update TRANS set
PID='02' where ID=2” SQLSERVER0000I The SQL command
completed successfully. C:\Documents
and Settings\user01>sqlcmd -d sample -Q “update TRANS set
PID='03' where ID=3” SQLSERVER0000I The SQL command
completed successfully. C:\Documents
and Settings\user01>sqlcmd -d sample -Q “update TRANS set
PID='04' where ID=4” SQLSERVER0000I The SQL command
completed successfully. C:\Documents
and Settings\user01>sqlcmd -d sample -Q “update TRANS set
PID='00' where ID=6” SQLSERVER0000I The SQL command
completed successfully. C:\Documents
and Settings\user01>sqlcmd -d sample -Q “select * from
TRANS” ID AMOUNT CODE
PID ------ -------- ------ --- 0 34.40 out 00 1 123.45 in 01 2 100.00 in 00 3 0.75 in 02 4 15.00 out 02 6 120.00 In 00 (6 rows affected) C:\Documents
and Settings\user01> |
Now
we can create a view name trans_view to reflect name of the person instead of
PID. PID is usually handy for use with managing multiple tables within
database. Views are very handy and useful for creating end-user reports.
C:\Documents
and Settings\user01>sqlcmd -d sample -Q “create view trans_view as SELECT t.AMOUNT,t.CODE,p.FNAME,p.LNAME
from TRANS t, PERSONS p where p.PID=t.PID” C:\Documents
and Settings\user01>sqlcmd -d sample -Q “select * from trans_view” AMOUNT CODE
FNAME LNAME -------- ------
---------------- ------------ 13.45 IN Marry Boon 123.45 in David Boon 34.40 out John Boon 123.45 in John Boon 100.00 in David Boon (5 rows affected) |
So,
we had an idea how Views work. In actual
practice, the views are rarely so simple. But the logic behind a view is always
same. JOIN tables and pretend to be one table. Please note that for simplicity
of examples, we did not use TIMESTAMP column in TRANS table, which is mostly used
to keep track of transaction along with some other more useful info.
For simplest use of database system,
we have already covered most objects. In actual usage I hardly need anything
other than what we have covered so far. The other objects are for some more
sophisticated actions. For example, PROCEDURES and FUNCTIONS are very useful
but for the scope of this tutorial these will be covered in last parts.
Let’s
discuss some of useful built-in functions.
CHAR
The CHAR function returns a fixed-length character string representation of the
argument.
ASCII
Returns the ASCII value for the specific character
CONCAT
Adds two or more strings together
The HEX function returns a hexadecimal representation of a value.
UPPER
Converts a string to upper-case
LOWER
The LOWER function returns a string in which all the characters have been
converted to lowercase characters.
LEFT
The LEFT function returns a string that consists of the specified number of
leftmost bytes of the specified string units.
LENGTH
The LENGTH function returns the length of a value.
SUBSTRING
Extracts some characters from a
string
LOCATE
The LOCATE function returns the position at which the first occurrence of an
argument starts within another argument.
RTRIM
Removes trailing spaces from a
string
LTRIM
The LTRIM function removes blanks or hexadecimal zeros from the beginning of a
string expression.
MAX
The MAX scalar function returns the maximum value in a set of values.
MIN
The MIN scalar function returns the minimum value in a set of values.
RIGHT
The RIGHT function returns a string that consists of the specified number of
rightmost bytes or specified string unit from a string.
RTRIM
The RTRIM function removes blanks or hexadecimal zeros from the end of a string
expression.
USER_NAME
Returns the database user name based on the specified id
CAST
Converts a value (of any type)
into a specified datatype
TIME
The TIME function returns a time derived from a value.
TIMESTAMP
The TIMESTAMP function returns a timestamp derived from its argument or
arguments.
Following
are some connection dependant REGISTER VARIABLES.
Detailed
searchable information is always available online from Microsoft. The manuals
are another source of good info if we have these handy for the time when we
need.
Link
to online documentation https://docs.microsoft.com/en-us/sql/t-sql/functions/functions