Errata

Transact-SQL Programming

Errata for Transact-SQL Programming

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
Printed
Page xxii
The "Comments and Questions" section was replaced with the following

text:

Comments and Questions

The information in this book has been tested and verified, but you may find
that features have changed (or you may even find mistakes!). You can send any
errors you find, as well as suggestions for future editions, to:

O'Reilly & Associates, Inc.
101 Morris Street
Sebastopol, CA 95472
(800) 998-9938 (in the United States or Canada)
(707) 829-0515 (international/local)
(707) 829-0104 (fax)

There is a web page for this book, where we list any errata, examples, and
additional information. You can access this page at:

http://www.oreilly.com/catalog/9781565924017/

To ask technical questions or comment on the book, send email to:

bookquestions@oreilly.com

For more information about our books, conferences, software, Resource Centers,
and the O'Reilly Network, see our web site at:

http://www.oreilly.com

Anonymous    Dec 01, 2000
Printed
Page xxiii
This note was added as the last paragraph under "Acknowledgments"

"A special thanks goes to Perry Stearn, whose amazing eye for
detail and methodical approach have greatly improved our text."

Anonymous    Dec 01, 2000
Printed
Page 1
1

SFI links for the SQL Programmer product on the CD do not work, nor do the ammended
links for the updated product. Does not appear to be on the SFI web site

AUTHOR: We need to post information on the web site stating that SFI is no longer
selling this product. BMC bought SFI and then let the product drop off radar.

Anonymous   
Printed
Page 9

The third sentence of the second paragraph did read:

"For example, the trick name appears in every animal record,
but the trick_nbr should be sufficient since we've already got
the name in the Tricks table."

Now reads:

"For example, both the trick_nbr and trick_name appear in every
record of the old, 1NF Trick table. However, we don't need the
trick_name in the 2NF Animal Tricks table since we've already got
the trick_name in the 2NF Tricks table."

Anonymous    Dec 01, 2000
Printed
Page 12

The fourth paragraph in the sidebar did read:

"Almost a purely academic exercise, SNF..."

Now reads:

"Almost a purely academic exercise, 5NF..."

Anonymous    Dec 01, 2000
Printed
Page 13
In first paragraph of the section "Row Processing Versus Set Processing,"

change "declarative processing" to "procedural processing." In the second
paragraph, change "procedural processing" to "declarative processing."

Anonymous    Dec 01, 2000
Printed
Page 49
In Figure 2-6, changed "job_is=job_id" to "job_id=job_id" and changed

"au_lnname" and "au_fnname" in the "authors" table to "au_lname" and
"au_fname".

Anonymous    Dec 01, 2000
Printed
Page 58

The second paragraph of comments for DEFAULT did read:

"Defaults may be table- or column-level."

Now reads:

"A column default may be declared with the column definition or
with the table definition at the end of the CREATE TABLE statement."

Anonymous    Dec 01, 2000
Printed
Page 63
example middle of page

SQL Server 2000 and later versions will not allow double quotes in the line DEFAULT ("CA")...
it should use single quotes, like DEFAULT ('CA')

Anonymous   
Printed
Page 77
The following warning should be added below the grid at the top of the

page:

"Cross join syntax is a Microsoft extension and is not supported on
Sybase ASE 11.5."

Anonymous   
Printed
Page 77
The Sybase side of the grid on the top of the page was changed to read as

follows:

SELECT [ALL | DISTINCT] select_item1,
select_item2, select_item3, ...
[INTO [table_name]]
[FROM tablename [alias]
[(index {index_name | table_name }
[parallel [degree_of_parallelism]]
[prefetch size ][lru|mru])
[holdlock | noholdlock] [shared]] [,...,
[,...,tablename16 [alias16]
[(index {index_name | table_name }
[parallel [degree_of_parallelism]]
[prefetch size ][lru|mru])
[holdlock | noholdlock] [shared]]
[WHERE clause ]
[GROUP BY clause ]
[HAVING clause ]
[ORDER by clause ]
[COMPUTE clause ]
[FOR { READ ONLY | UPDATE [ OF list_of_
columns]}]
[AT ISOLATION {READ UNCOMMITTED | READ
COMMITTED |SERIALIZABLE}]
[FOR BROWSE]

Anonymous    Dec 01, 2000
Printed
Page 80
At the very bottom of the page, the last line of the code snippet did

read:

Select e.emp_id,
(SELECT MAX(hire_date) FROM employee) = "Max_Hire_Date"
FROM employee

Now reads:

SELECT e.emp_id,
(SELECT MAX(hire_date) FROM employee) = "Max_Hire_Date"
FROM employee AS e

Anonymous    Dec 01, 2000
Printed
Page 84
In Figure 3-1, changed "emp_id=job_id" to "job_id=job_id".

Anonymous    Dec 01, 2000
Printed
Page 85
In the second paragraph, changed

"(Outer joins will be explained soon.)"

to:

"(Outer joins are explained in Table 3-2.)"

Anonymous    Dec 01, 2000
Printed
Page 86
In Table 3-2 (first column), changed "LEFT JOINS" to "LEFT JOIN".

Anonymous    Dec 01, 2000
Printed
Page 104-105
The informal table describing Sale and New_Sales was incorrect.

The column describing the contents of the New_Sales table should contain
'payment_terms CHAR(12) NOT NULL' immediately under the 'order_date' entry.
Adding this value in makes the following text correct.

Anonymous    Dec 01, 2000
Printed
Page 118

In the second code snippet on the page, the eighth line down did read:

UPDATETEXT pub_info.pr_info @pointervalue 'Now is the time for all good

Now reads:

WRITETEXT pub_info.pr_info @pointervalue 'Now is the time for all good

Anonymous    Dec 01, 2000
Printed
Page 126

The second paragraph did read:

"For example, the following identifier references the byroyalty
stored procedure in the master database owned by the developer
auser."

Now reads:

"For example, the following identifier references the byroyalty
stored procedure in the pubs database owned by the developer dbo
(database owner):" (note the colon)

Anonymous    Dec 01, 2000
Printed
Page 130
At the end of the paragraph under "Delimiters and Operators," changed

the colon to a period.

Anonymous    Dec 01, 2000
Printed
Page 130
In Table 4-2, changed the usage description for % from

"Wildcard attribute indicator"

to:

"Mod operator; also a wildcard attribute indicator"

Anonymous    Dec 01, 2000
Printed
Page 131-132
In Table 4-3, the "Exclusive OR" and "OR" operators symbols were

backward. It should be "| = OR" and "^ = Exclusive OR."

Anonymous    Dec 01, 2000
Printed
Page 167
Top of page

The following WHERE clause from the book:
"...WHERE LogID = (SELECT MAX(LogID) FROM StockLog) AND Type!='N'..."

Will return NO RECORDS AT ALL if the most recent Log record is of Type 'N'. It is
true that we don't want to deal with Type 'N' records, but the goal is to find the
most recent change that was not of type 'N'.
The following minor change to the WHERE clause will remedy that:

"...WHERE LogID = (SELECT MAX(LogID) FROM StockLog WHERE Type!='N')..."

Anonymous   
Printed
Page 168
In the 3rd-to-last line on the page, changed "COMMIT, COMMIT" to "COMMIT."

Anonymous    Dec 01, 2000
Printed
Page 177

The third sentence in the third paragraph did read:

"There are 10 basic categories of system datatypes..."

Now reads:

"There are 9 basic categories of system datatypes..."

Anonymous    Dec 01, 2000
Printed
Page 184

The 5th line of the first bulleted item did read:


"WHERE hire_date LIKE May 5, 1994%"

Now reads:

"WHERE hire_date LIKE 'May 5 1994%'"

Anonymous    Dec 01, 2000
Printed
Page 185

The last paragraph, after "Approximate Numeric Datatypes," did read:

"Approximate numeric datatypes (FLOAT and REALl)..."

Now reads:

"Approximate numeric datatypes (FLOAT and REAL)..."

Anonymous    Dec 01, 2000
Printed
Page 186

The first two paragraphs on the page did read:

The FLOAT datatype, specified as FLOAT(length), can hold positive and
negative floating-point numbers with a maximum 15-digit precision.
Although you can specify a float length of 1 to 15, the default is 15.
This enables a range of values from positive 2.23E-308 through
1.79E-308, zero, and (negative) -2.23E-308 through -1.79E-308. Floats
are frequently used in scientific notation. Float values always
consume 8 bytes of storage space.

The REAL datatype, specified as REAL(length), is essentially a float
with a more limited range of values. REAL is limited to a 7-digit
maximum precision. Its allowable range of values encompasses 1.1E-38
through 3.40E-38, zero, and (negative) -1.18E-38 through -3.40E-38.
Its storage requirements are 4 bytes per REAL value. It is otherwise
identical to FLOAT.

They now read:

The FLOAT datatype can hold positive and negative floating-point
numbers with a maximum 15-digit precision. Although you can specify a
float length of 1 to 15, the default is 15. This enables a range of
values from (negative) -1.79E+308 through -2.23E-308, zero, and
(positive) 2.23E-308 through 1.79E+308. Floats are frequently used in
scientific notation. Float values always consume 8 bytes of storage
space.

The REAL datatype is essentially a float with a more limited range of
values. Note you cannot specify a precision when declaring a REAL as
you can with FLOAT. REAL is limited to a 7-digit maximum precision,
and is functionally equivalent to specifying a FLOAT(24). Its allowable
range of values is between (negative) -3.40E+38 through (positive)
3.40E+38.

Anonymous    Dec 01, 2000
Printed
Page 186
The fourth sentence in the third paragragh

"The INT datatype can accomodate values ranging from -2,147,483,647 to 2,147,483,647; consuming..."

NOW READS:
The INT datatype can accomodate values ranging from -2,147,483,648 to 2,147,483,647; consuming..."

Anonymous    Jan 01, 2004
Printed
Page 211

The first bulleted item under "If Constructs" did read:

"If monthly sales exceed 200..."

Now reads:

"If monthly sales equal or exceed 200..."

Anonymous    Dec 01, 2000
Printed
Page 212
Deleted the comment at the beginning of the code sample at the end of

the page ("-- check to see if the current user is the SA").

Anonymous    Dec 01, 2000
Printed
Page 214
The first paragraph after the note tip that begins


"Another approach to the multitest IF..."

Has been replaced with the following text:

"Another approach to the multitest IF statement is available
through the OR keyword. The OR keyword enables you to couple
several conditional statements together. If any one of the
conditional statements meet the condition of the IF statement,
then the entire condition is considered TRUE. Only when all
the conditions fail to meet the condition of the IF statement
will the IF statement evaluate to FALSE. An IF...OR statement
might look like this:"

Anonymous    Dec 01, 2000
Printed
Page 215

The code after the first full paragraph did read:

"IF EXISTS (SELECT * FROM titles WHERE title_id IN ('FD1711','FD1032'))
BEGIN
UPDATE titles SET ytd_sales = 1700
WHERE title_id = 'FD1711'

UPDATE titles SET ytd_sales = 3000
WHERE title_id = 'FD1032'
END"

Now reads:

"IF EXISTS (SELECT * FROM titles WHERE title_id = 'FD1711')
UPDATE titles SET ytd_sales = 1700
WHERE title_id = 'FD1711'

IF EXISTS (SELECT * FROM titles WHERE title_id = 'FD1032')
UPDATE titles SET ytd_sales = 3000
WHERE title_id = 'FD1032'"

Anonymous    Dec 01, 2000
Printed
Page 215

The first sentence of the second full paragraph did read:

"This example tests for the existence of two values in the titles
table."

Now reads:

"This example tests for the existence of a value in the titles
table."

Anonymous    Dec 01, 2000
Printed
Page 215

The third sentence of the second full paragraph did read:

"If they do exist, our fine author Fudd has his ytd_sales numbers
updated."

Now reads:

"If either of the values exist, our fine author Fudd has his
ytd_sales numbers updated."

Anonymous    Dec 01, 2000
Printed
Page 215-216

The code sample that begins at the bottom of p. 215 did read:

IF EXISTS (SELECT * FROM titles WHERE title_id IN ('FD1711','FD1032'))
BEGIN
UPDATE titles SET ytd_sales = 1700
WHERE title_id = 'FD1711'

UPDATE titles SET ytd_sales = 3000
WHERE title_id = 'FD1032'
END
ELSE
BEGIN
INSERT INTO titles
VALUES ('FD1711', 'Zen and the Art of Wabbit Hunting', 'psychology',...)

INSERT INTO titles
VALUSE ('FDU1032', 'The ACME Shopping Experience', 'business',...)
END

Now reads:

"IF EXISTS (SELECT * FROM titles WHERE title_id = 'FD1711')
UPDATE titles SET ytd_sales = 1700
WHERE title_id = 'FD1711'
ELSE
INSERT INTO titles
VALUES ('FD1711', 'Zen and the Art of Wabbit Hunting', 'psychology',...)

IF EXISTS (SELECT * FROM titles WHERE title_id = 'FD1032')
UPDATE titles SET ytd_sales = 3000
WHERE title_id = 'FD1032'
ELSE
INSERT INTO titles
VALUES ('FD1032', 'The ACME Shopping Experience', 'business',...)"

Anonymous    Dec 01, 2000
Printed
Page 216

The text above the header "Nested IF...ELSE Statements" did read:

"IF EXISTS (SELECT * FROM titles WHERE title_id IN ('FD1711',
'FD1032'))BEGIN SELECT...

In fact, some Transact-SQL gurus prefer to smash the BEGIN clause
onto the same line as the IF. (You would have to place the SELECT
on a new line, however.)"

Now reads:

"IF EXISTS (SELECT * FROM titles WHERE title_id IN ('FD1711',
'FD1032')) BEGIN UPDATE...

In fact, some Transact-SQL gurus prefer to smash the BEGIN clause
onto the same line as the IF. (You would have to place the UPDATE
on a new line, however.)"

Anonymous    Dec 01, 2000
Printed
Page 219

The block of code did read:

IF @inventory_level <= 100 GOTO step2

IF @inventory_level BETWEEN 99 and 21
BEGIN
EXECUTE order_books @title_id
step2
END

IF @inventory_level >= 20 GOTO dangerously_low_inv

step2:
...<some more code here>...

dangerously_low_inv:
EXECUTE order_books @title_id
RAISERROR('This item may have been backordered!',16,1)
step2

Now reads:

IF @inventory_level >= 100 GOTO step2

IF @inventory_level BETWEEN 21 and 99
BEGIN
EXECUTE order_books @title_id
GOTO step2
END

IF @inventory_level <= 20 GOTO dangerously_low_inv

step2:
...<some more code here>...

dangerously_low_inv:
EXECUTE order_books @title_id
RAISERROR('This item may have been backordered!',16,1)
GOTO step2

Anonymous    Dec 01, 2000
Printed
Page 228
The following changes were made in the code sample at the top of the

page:

a) Inserted the following line above "BEGIN TRANSACTION" at the same level of
indent: "DECLARE @err_status INT".

b) In line 7, changed "VALUSE" to "VALUES" and "FDU1032" to "FD1032".

c) In line 11, changed "@@err_status" to "@err_status".

d) Deleted the final "END".

Anonymous    Dec 01, 2000
Printed
Page 235
The third paragraph has been deleted and replaced with the following

text:

"This command returns no result, but it impacts global variables. In
Sybase the @@rowcount global variable is incremented every time there
is a fetch within a cursor. This means that only once all the rows have
been fetched can you determine how many rows were actually in the
result set to begin with. Microsoft provides a separate global variable
@@cursor_rows to report the number of rows in the last opened cursor:"

Anonymous    Dec 01, 2000
Printed
Page 238

The top line in Table 8-4 did read:

"Microsoft @@fetch_status Sybase @@sqlstats"

Now reads:

"Microsoft @@fetch_status Sybase @@sqlstatus"

Anonymous    Dec 01, 2000
Printed
Page 242
Table 8-5, column 1

Changed "cursor_name" to "DEALLOCATE cursor_name".

Anonymous    Dec 01, 2000
Printed
Page 276
In line 5 of the last paragraph, changed "AllMS" to "All."

Anonymous    Dec 01, 2000
Printed
Page 279
In the last line on the page, changed "nam with a" to "name with a."

Anonymous    Dec 01, 2000
Printed
Page 318
Deleted the second-to-last sentence under "Row" ("Both Microsoft SQL

Server Version 7.0 and Sybase Adaptive Server 11.9 have added full row level
blocking.").

Anonymous    Dec 01, 2000
Printed
Page 326
In the second bullet, changed "SETDEADLOCKPRIORITY" to "SET

DEADLOCKPRIORITY" (added a space).

Anonymous    Dec 01, 2000
Printed
Page 372
Table 12-8

DATALENGTH( 'ABC ' ) 5

NOW READS:
DATALENGTH( 'ABC ' ) 4

Anonymous    Jan 01, 2004
Printed
Page 439
1st sample query

FROM sysoobjects
should read:
FROM sysobjects

Anonymous   
Printed
Page 442
3rd (code example2)

CREATE PROCEDURE get_yearly_sales_summary
@year INT=NULL
AS
IF (@year <> NULL)

NOW READS:

CREATE PROCEDURE get_yearly_sales_summary
@year INT=NULL
AS
IF (@year IS NOT NULL)

Anonymous    Jan 01, 2004
Printed
Page 471

Line 27 did read:

"SET big_return = *"

Now reads:

"SET big = '*'"

Anonymous    Dec 01, 2000
Printed
Page 471

Line 28 did read:

"WHERE total_return > 1000"

Now reads:

"WHERE total_revenue > 1000"

Anonymous    Dec 01, 2000
Printed
Page 472

Line 16 did read:


"FROM#detail"

Now reads:

"FROM #detail"

Anonymous    Dec 01, 2000
Printed
Page 490
In both columns of the table, the line

"FOR INSERT, UPDATE"

Has been changed to:

"FOR INSERT, UPDATE, DELETE"

Anonymous    Dec 01, 2000
Printed
Page 491

The second line on the page did read:

"every time a record gets created or modified:"

Now reads:

"every time a record is added, modified, or deleted:"

Anonymous    Dec 01, 2000
Printed
Page 491

The third line of the code sample did read:

"FOR INSERT,UPDATE"

Now reads:

"FOR INSERT, UPDATE, DELETE"

Anonymous    Dec 01, 2000
Printed
Page 491

The last line on the page did read:

"FOR insert,update"

Now reads:

"FOR insert, update, delete"

Anonymous    Dec 01, 2000
Printed
Page 492

Line 16 did read:

RAISERROR 50001"Cannot create entry for non-existent title"

Now reads:

RAISERROR 50001 "Cannot create entry for non-existent title"

Anonymous    Dec 01, 2000
Printed
Page 492

Line 24 did read:

WHERE a.author_id = b.author_id) <> @rcount

Now reads:

"WHERE a.au_id = b.au_id) <> @rcount"

Anonymous    Dec 01, 2000
Printed
Page 495
"ROLLBACK TRIGGER"

Now reads:

"ROLLBACK TRIGGER (Sybase only)"

Anonymous    Dec 01, 2000
Printed
Page 528

The 5th line on the page did read:

"... found in ever database ..."

Now reads:

"... found in every database ..."

Anonymous    Dec 01, 2000
Printed
Page 528

The 7th line did read:

"... find iti n the database ..."

Now reads:

"... find it in the database ..."

Anonymous    Dec 01, 2000
Printed
Page 578

Before the "Temporary Data Storage" heading, insert a warning that reads:


"Sybase and Microsoft differ in the way they record user-defined
messages. Microsoft stores them in the sysmessages table, along with
the system messages, while Sybase stores them in the sysusermessages
table. Regardless of whether you are using Sybase or Microsoft SQL
Server, you will still use the sp_addmessage to add the user-defined
message. The server then takes care of returning the appropriate
message when a RAISERROR is raised. The most critical aspect of the
sys(user)messages structure is that you can add your own messages to a
database."

Anonymous   
Printed
Page 595

Item #5 did read:

"If you prefer to resort to reverse-engineering the code, the good
news is that the CD-ROM accompanying this book has a number of
Transact-SQL utilities designed to do just that. Table 19-2 briefly
describes each utility and its purpose."

Now reads:

"If you prefer to resort to reverse-engineering the code, the good
news is that a number of Transact-SQL utilities designed to do just
that have been included on the CD-ROM accompanying this book in the
files gserver.sql and sqlv600.sql. Table 19-2 briefly describes each
utility and its purpose."

Anonymous    Dec 01, 2000
Printed
Page 595
Table 19-2 has been modified to read as follows

Filename | Procedure | Purpose
____________|_______________|_____________________________________
SQLV600.SQL | sp_rtable | Reverse-engineer a table
SQLV600.SQL | sp_ralltables | Reverse-engineer all tables...
SQLV600.SQL | sp_rindex | Reverse-engineer indexes...
SQLV600.SQL | sp_rallindex | Reverse-engineer all indexes...
gserver.SQL | sp_gserver | Reverse-engineer the contents...
SQLV600.SQL | sp_rbinddefs | Reverse-engineer binding...
SQLV600.SQL | sp_rbindrules | Reverse-engineer binding...

Anonymous    Dec 01, 2000
Printed
Page 626

The first sentence of the third paragraph did read:

"Once you have isssued SET NOEXEC OFF, the only command that may be
executed is SET NOEXEC ON."

Now reads:

"Once you have isssued SET NOEXEC ON, the only command that may be
executed is SET NOEXEC OFF."

Anonymous    Dec 01, 2000
Printed
Page 687
In Table 21-2, there were two entries for PAGE. The line "PAGE -

Performance tuning and monitoring" has been removed from the table.

Anonymous    Dec 01, 2000
Printed
Page 690-700

The column header in Table 21-3 did read:

| Permis-| Vendor |
"DBCC Option | sions | Support | Description"

Now reads:

| Permis-| Vendor |
"DBCC Command | sions | Support | Description"

Anonymous    Dec 01, 2000
Printed
Page 690

The entry for CHECKIDENT in Table 21-3 did read:

"CHECKIDENT | | MS | Verifies that the internal
identify value for

Now reads:

"CHECKIDENT | SA or DBO | MS | Verifies that the internal
identify value for

Anonymous    Dec 01, 2000
Printed
Page 690
Table 21-3 did not used to contain an entry for DBCC CHECKSTORAGE.

The following entry was added below CHECKIDENT:

| Permis-| Vendor |
DBCC Command | sions | Support | Description

CHECKSTORAGE | SA | Sybase | CHECKSTORAGE is a powerful set of DBCC
checks available only on Sybase servers.
It requires significant database administrator
setup and configuration to use properly,
including the creation of the dbccdb system
database. We are excluding this command
because it is outside the toolset of the
average Transact-SQL developer.

Anonymous    Dec 01, 2000
Printed
Page 691

In Table 21-3, column 1 did read:

"DREINDEX([..."

Now reads:

"DBREINDEX([..."

Anonymous    Dec 01, 2000
Printed
Page 695

The entry for PAGE in Table 21-3 did read:

"PAGE | | MS | Prints out the contents of a specific page"

Now reads:

"PAGE | SA | MS | Prints out the contents of a specific page"

Anonymous    Dec 01, 2000
Printed
Page 770
At the end of Table B-4, after VARP, the list of new functions in SQL

Server Version 7 omits the new function YEAR. It should be placed after the
description of VARP and before the + and -.

The row in the table explaining the YEAR function should appear as follows:

Function Type Syntax Description
-----------------------------------------------
YEAR | Date | YEAR(date) | This is functionally equivalent to the
DATEPART(year, date) function. It returns
a 4-digit year.

{CD} The calc_db_size.sql script on the CD has an error. The new
calc_db_size.sql script is listed below as a replacement for the earlier,
buggy script:

CREATE PROC calculate_db_space @dbname VARCHAR(30) AS

-- declare necessary variables
DECLARE @ld_dbsize DEC(15,2), @ld_dbunused DEC(15,2)
DECLARE @msg_line VARCHAR(50)

-- don't run this calculation on TEMPDB
IF (@dbname <> 'tempdb')
BEGIN
-- the SET NOCOUNT ON command reduces unneeded feedback from SQL Server
SET NOCOUNT ON
-- calculate the space used
SELECT @ld_dbsize = SUM(CONVERT(DEC(15,2),size))
FROM master.dbo.sysusages
WHERE dbid = DB_ID(@dbname)
-- calculate the unused space
SELECT @ld_dbunused = @ld_dbsize - (SELECT SUM(CONVERT(DEC(15,2),reserved))
FROM sysindexes
WHERE indid IN (0, 1, 255))
-- print the output
SELECT "Megabytes Assigned" = (@ld_dbsize/512),
"Megabytes Unused" = (@ld_dbunused/512)
END
ELSE
BEGIN
-- build the error msg telling which procedure spawned the error.
SELECT @msg_line = 'TEMPDB is very transient. Don''t bother sizing it.'
RAISERROR(@msg_line,16,2) WITH LOG
-- quit the program
RETURN
END

Anonymous   
Printed
Page 793
The following entry was added to the index: "DISTINCT, 78"

Anonymous    Dec 01, 2000
Printed
Page 795
The following entry was added to the index: "HAVING, 94"

Anonymous    Dec 01, 2000
Printed
Page 803
The entry "sysdevice, 725" was changed to "sysdevices, 725."

Anonymous    Dec 01, 2000
Printed
Page 804
The entry "sysdevice, 725" under "system tables" was changed to

"sysdevices, 725."

Anonymous    Dec 01, 2000
Printed
Page 805

(805) Added a closing parenthesis to the entry "zombie process scenario."

Anonymous    Dec 01, 2000