Corrections/Comments
 

Home
Books
T-SQL Courses
Resources
Blog
About BG


Microsoft SQL Server 2008: T-SQL Fundamentals

Last modified: 2011-04-21
Note: If you have a later printing of this book, it may already contain the below corrections.

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         10

Should 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;

Back to T-SQL Fundamentals 2008 Main Page


 

Home ] Books ] T-SQL Courses ] Resources ] Blog ] About BG ]

[SolidQ Home] [SolidQ Blog] [SolidQ Courses] [The SolidQ journal]