|
Date / By |
Where |
Correction |
2009-10-08
Robert Forrest |
Table of Contents, Page xi and xii |
Error: The page numbers for the entries starting with
Chapter 10 and on are behind by 2. |
2009-08-12
Erland Sommarskog |
Chapter 1, Page 15, Second item in bullet list |
Currently: Resource The Resource database was
added as of SQL Server 2005 and it holds all system objects. When you
query metadata information in a database, this information appears to be
local to the database but in practice it resides in the Resource
database. Should
be: Resource The Resource database is a hidden, read-only
database that was added as of SQL Server 2005 and it holds the
definitions of all system objects. When you query system objects in a
database, they appear to reside in the sys schema of the local database,
but in practice their definitions reside in the Resource database. |
2010-02-23
Tiru Bokka |
Chapter 2, Page 47, Third paragraph |
Currently: "Note that the reason that I specified the
decimal value 100. (one hundred dot) in the expressions instead of the
integer 100 is in order to cause implicit conversion of the integer
values val and SUM(val) to decimal values. Otherwise, the division would
have been an integer division and the fractional part would have been
truncated." Error: This paragraph would have
been relevant had the val attribute been of an integer type, but in
practice it is of a decimal type already. Hence this paragraph should be
removed. |
2009-02-01
Brenda Myers |
Chapter 2, Page 47, Query at bottom of page |
Currently: SELECT ... NTILE(100) ... Should
be: SELECT ... NTILE(10) ... |
2009-10-08
Robert Forrest |
Chapter 2, Page 53, item 3 in the num list at the bottom
of the page |
Currently: + (Positive), – (Negative), + (Add), (+
Concatenate), – (Subtract) Should be:
+ (Positive), – (Negative), + (Add), + (Concatenate), –
(Subtract) |
2009-11-30
Geert Diddens |
Chapter 2, Page 62, second line from bottom of page; Page
63, first paragraph, fifth line; Page 63, third paragraph, fourth line |
Currently: 10/col1 > 2 Should be:
col2/col1 > 2 |
2009-04-17
John Paul Cook |
Chapter 2, Page 76, Paragraph below Table 2-1 |
Currently:
The storage requirements for the last three data types in Table 2-1 (TIME,
DATETIME2, and
DATETIMEOFFSET) depend on the
accuracy you choose. You specify the
accuracy
as an integer in the range 0 to 7 representing the fractional second
precision. For example, TIME(0) means 0 fractional second
precision—in other words, one-second accuracy.
TIME(3) means one-millisecond
accuracy, and
TIME(7) means 100-nanosecond
accuracy. If you don’t
specify a fractional second precision, SQL Server assumes 7 by default
with all three aforementioned types.
Should
be:
The storage requirements for the last three data types in Table 2-1 (TIME,
DATETIME2, and
DATETIMEOFFSET) depend on the
precision you choose. You specify the
precision
as an integer in the range 0 to 7 representing the fractional second
precision. For example, TIME(0) means 0 fractional second
precision—in other words, one-second precision.
TIME(3) means one-millisecond
precision, and
TIME(7) means 100-nanosecond
precision. If you
don’t specify a fractional second precision, SQL Server assumes 7 by
default with all three aforementioned types. |
2009-10-16
Don Cummings |
Chapter 2, Page 77, Second Paragraph, Fourth Sentence |
Currently: SQL Server defines precedence among datatypes,
and will usually implicitly covert the operand that has lower
datatype precedence to the one that has higher precedence. Should
be: SQL Server defines precedence among datatypes, and will usually
implicitly convert the operand that has lower datatype precedence
to the one that has higher precedence. |
2009-07-09
Pat Lowe |
Chapter 2, Page 87, Syntax for DATEPART function |
Currently: DATEPART( dt_val, part ) Should
be: DATEPART( part, dt_val ) |
2009-07-09
Pat Lowe |
Chapter 2, Page 88, Syntax for DATENAME function |
Currently: DATENAME( dt_val, part ) Should
be: DATENAME( part, dt_val ) |
2009-10-16
Don Cummings |
Chapter 2, Page 98, Answer 5, Fourth First Sentence |
Currently: Because the request involves activity in the
year 2004, the query should have a WHERE clause with the
appropriate date range filter (orderdate >= '20040101' AND
orderdate < '20050101'). Should
be: Because the request involves activity in the year 2007, the
query should have a WHERE clause with the appropriate date range filter
(orderdate >= '20070101' AND orderdate < '20080101'). |
2009-07-15
David L. Tappan |
Chapter 4, Page 141, Third full paragraph, First sentence |
Currently: This query returns the order ID 10274.
The outer row’s order ID—10248—is compared with the inner one—10274—and
because there’s no match in this case, the outer row is filtered out. Should
be: This query returns the order ID 10739. The outer
row’s order ID—10248—is compared with the inner one—10739—and
because there’s no match in this case, the outer row is filtered out. |
2010-01-14
Duncan Giles |
Chapter 4, Page 157, Solution 3, Second sentence |
Currently: Write an outer query against the Employees
table returning employees whose IDs appear in the set of employee
IDs returned by the subquery. Should be: Write
an outer query against the Employees table returning employees whose IDs
do not appear in the set of employee IDs returned by the subquery. |
2010-01-14
Duncan Giles |
Chapter 4, Page 157, Solution 4, Second sentence |
Currently: Write an outer query against the Customers
table that filters only customer rows where the country attribute
appears in the set of countries returned by the subquery.
Should be: Write an outer query against the Customers table that filters
only customer rows where the country does not appear in the set
of countries returned by the subquery. |
2010-02-23
Tiru Bokka |
Chapter 4, Page 157, Solution 4, Sentence before last |
Currently: "...because the same country can have more
than one query." Should be: "...because
the same country can have more than one customer." |
2008-11-11
Levi Shaw |
Chapter 5, Page 174, Third line from bottom of page |
Currently: SELECT TOP(100) Should
be: SELECT TOP(100) PERCENT |
2011-04-21
Demetrios Biskinis |
Chapter 6, Page 209, Second line |
Currently: "...before the rows from Customers,..." Should
be: "...before the rows from Suppliers,..." |
2009-11-19
Erika Dantas |
Chapter 7, Page 214, Bottom part of page, Output of query |
Currently:
orderid orderdate
empid custid qty
----------- -------------------------- ----------- --------- -----------
10001 2007-12-24 00:00:00.000
2 A
12
10005 2007-12-24 00:00:00.000
1 B
20
10006 2008-01-18 00:00:00.000
1 C
14
20001 2008-02-12 00:00:00.000
2 B
12
20002 2009-02-16 00:00:00.000
1 C
20
30001 2007-08-02 00:00:00.000
3 A
10
30003 2009-04-18 00:00:00.000
2 B
15
30004 2007-04-18 00:00:00.000
3 C
22
30007 2009-09-07 00:00:00.000
3 D
30
40001 2008-01-09 00:00:00.000
2 A
40
40005 2009-02-12 00:00:00.000
3 A
10Should
be:
orderid orderdate
empid custid qty
----------- ---------- ----------- ------ -----------
10001 2007-12-24 2
A 12
10005 2007-12-24 1
B 20
10006 2008-01-18 1
C 14
20001 2008-02-12 2
B 12
20002 2009-02-16 1
C 20
30001 2007-08-02 3
A 10
30003 2009-04-18 2
B 15
30004 2007-04-18 3
C 22
30007 2009-09-07 3
D 30
40001 2008-01-09 2
A 40
40005 2009-02-12 3
A 10 |
2009-04-27
John Paul Cook |
Chapter 7, Page 230, First paragraph, Second sentence |
Currently: For example, all rows where empid
is 0 and custid is 0 are
associated with the grouping set (empid, custid). Should
be: For example, all rows where grpemp is 0 and
grpcust is 0 are associated with
the grouping set (empid, custid). |
2009-02-11
Mustafa KAYA |
Chapter 7, Page 230, Middle paragraph, Last sentence |
Currently: The grouping set (a, c) is represented by the
integer 10 (1×8 + 0×4 + 1×2 + 0×1), and so on. Should
be: The grouping set (a, c) is represented by the integer 5 (0×8 +
1×4 + 0×2 + 1×1), and so on. |
2009-10-24
Robert Forrest |
Chapter 8, Page 260, First bullet point |
Currently: You cannot insert a row through the table
expression if the table expression doesn’t include at least one column
that doesn’t somehow get its value automatically (has a default value,
allows NULLs, has an IDENTITY property).
Problem: Confusing as written.
Should be: INSERT statements must specify values for
any columns in the underlying table that do not have implicit values. A
column can get a value implicitly if it allows NULLS, has a default
value, has an IDENTITY property, or is typed as ROWVERSION. |
2009-08-12
Erland Sommarskog |
Chapter 8, Page 261, Third sentence |
Currently: However, with some problems using a table
expression is not really an option. Should
be: However, with some problems using a table expression is the only
option. |
2010-10-05
Nagy Laszlo |
Chapter 9, Page 288, Output of query |
Currently: Contains the result column
most_recent_sql_handle twice. Should
be: Only once. Should remove third part of the output from the page. |
2009-04-27
John Paul Cook |
Chapter 9, Page 289, First paragraph after first query
output, second sentence |
Currently: As for the blocker, in this example you can
see the statement that caused the problem, but keep in mind that the
blocker may continue work and that the last thing you
see in the code isn’t necessarily the statement that caused the trouble. Should
be: As for the blocker, in this example you can see the statement that
caused the problem, but keep in mind that the blocker may continue
working and that the last thing you see in the code
isn’t necessarily the statement that caused the trouble. |
2010-08-03
Justin Wilson |
Chapter 10, Page 329, Lines 5 and 6 |
Currently:
BACKUP DATABASE TSQLFundamentals2008
TO DISK = 'C:\Temp\TSQLFundamentals2008_Diff.BAK' WITH INIT;
Should be:
BACKUP DATABASE TSQLFundamentals2008
TO DISK = 'C:\Temp\TSQLFundamentals2008_Diff.BAK' WITH INIT,
DIFFERENTIAL; |