|
Compatibility-level setting of 90
|
Compatibility-level setting of 100
|
Possibility of impact
|
|
The QUOTED_IDENTIFER setting is always set to ON for multistatement table-valued functions when they are created regardless of the session level setting.
|
The QUOTED IDENTIFIER session setting is honored when multistatement table-valued functions are created.
|
Medium
|
|
When you create or alter a partition function, datetime and smalldatetime literals in the function are evaluated assuming US_English as the language setting.
|
The current language setting is used to evaluate datetime and smalldatetime literals in the partition function.
|
Medium
|
|
The FOR BROWSE clause is allowed (and ignored) in INSERT and SELECT INTO statements.
|
The FOR BROWSE clause is not allowed in INSERT and SELECT INTO statements.
|
Medium
|
|
Full-text predicates are allowed in the OUTPUT clause.
|
Full-text predicates are not allowed in the OUTPUT clause.
|
Low
|
|
CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are not supported. The system stoplist is automatically associated with new full-text indexes.
|
CREATE FULLTEXT STOPLIST, ALTER FULLTEXT STOPLIST, and DROP FULLTEXT STOPLIST are supported.
|
Low
|
|
MERGE is not enforced as a reserved keyword.
|
MERGE is a fully reserved keyword. The MERGE statement is supported under both 100 and 90 compatibility levels.
|
Low
|
|
Using the <dml_table_source> argument of the INSERT statement raises a syntax error.
|
You can capture the results of an OUTPUT clause in a nested INSERT, UPDATE, DELETE, or MERGE statement, and insert those results into a target table or view. This is done using the <dml_table_source> argument of the INSERT statement.
|
Low
|
|
Unless NOINDEX is specified, DBCC CHECKDB or DBCC CHECKTABLE performs both physical and logical consistency checks on a single table or indexed view and on all its nonclustered and XML indexes. Spatial indexes are not supported.
|
Unless NOINDEX is specified, DBCC CHECKDB or DBCC CHECKTABLE performs both physical and logical consistency checks on a single table and on all its nonclustered indexes. However, on XML indexes, spatial indexes, and indexed views, only physical consistency checks are performed by default.
If WITH EXTENDED_LOGICAL_CHECKS is specified, logical checks are performed on indexed views, XML indexes, and spatial indexes, where present. By default, physical consistency checks are performed before the logical consistency checks. If NOINDEX is also specified, only the logical checks are performed.
|
Low
|
|
When an OUTPUT clause is used with a data manipulation language (DML) statement and a run-time error occurs during statement execution, the entire transaction is terminated and rolled back.
|
When an OUTPUT clause is used with a data manipulation language (DML) statement and a run-time error occurs during statement execution, the behavior depends on the SET XACT_ABORT setting. If SET XACT_ABORT is OFF, a statement abort error generated by the DML statement using the OUTPUT clause will terminate the statement, but the execution of the batch continues and the transaction is not rolled back. If SET XACT_ABORT is ON, all run-time errors generated by the DML statement using the OUTPUT clause will terminate the batch, and the transaction is rolled back.
|
Low
|
|
CUBE and ROLLUP are not enforced as reserved keywords.
|
CUBE and ROLLUP are reserved keywords within the GROUP BY clause.
|
Low
|
|
Strict validation is applied to elements of the XML anyType type.
|
Lax validation is applied to elements of the anyType type. For more information, see Wildcard Components and Content Validation.
|
Low
|
|
The special attributes xsi:nil and xsi:type cannot be queried or modified by data manipulation language statements.
This means that /e/@xsi:nil fails while /e/@* ignores the xsi:nil and xsi:type attributes. However, /e returns the xsi:nil and xsi:type attributes for consistency with SELECT xmlCol, even if xsi:nil = "false".
|
The special attributes xsi:nil and xsi:type are stored as regular attributes and can be queried and modified.
For example, executing the query SELECT x.query('a/b/@*') returns all attributes including xsi:nil and xsi:type. To exclude these types in the query, replace @* with @*[namespace-uri(.) != "insert xsi namespace uri" and not (local-name(.) = "type" or local-name(.) ="nil".
|
Low
|
|
A user-defined function that converts an XML constant string value to a SQL Server datetime type is marked as deterministic.
|
A user-defined function that converts an XML constant string value to a SQL Server datetime type is marked as non-deterministic.
|
Low
|
|
The XML union and list types are not fully supported.
|
The union and list types are fully supported including the following functionality:
-
Union of list
-
Union of union
-
List of atomic types
-
List of union
|
Low
|
|
The SET options required for an xQuery method are not validated when the method is contained in a view or inline table-valued function.
|
The SET options required for an xQuery method are validated when the method is contained in a view or inline table-valued function. An error is raised if the SET options of the method are set incorrectly.
|
Low
|
|
XML attribute values that contain end-of-line characters (carriage return and line feed) are not normalized according to the XML standard. That is, both characters are returned instead of a single line-feed character.
|
XML attribute values that contain end-of-line characters (carriage return and line feed) are normalized according to the XML standard. That is, all line breaks in external parsed entities (including the document entity) are normalized on input by translating both the two-character sequence #xD #xA and any #xD that is not followed by #xA to a single #xA character.
Applications that use attributes to transport string values that contain end-of-line characters will not receive these characters back as they are submitted. To avoid the normalization process, use the XML numeric character entities to encode all end-of-line characters.
|
Low
|
|
The column properties ROWGUIDCOL and IDENTITY can be incorrectly named as a constraint. For example the statement CREATE TABLE T (C1 int CONSTRAINT MyConstraint IDENTITY) executes, but the constraint name is not preserved and is not accessible to the user.
|
The column properties ROWGUIDCOL and IDENTITY cannot be named as a constraint. Error 156 is returned.
|
Low
|
|
Updating columns by using a two-way assignment such as UPDATE T1 SET @v = column_name = <expression> can produce unexpected results because the live value of the variable can be used in other clauses such as the WHERE and ON clause during statement execution instead of the statement starting value. This can cause the meanings of the predicates to change unpredictably on a per-row basis.
This behavior is applicable only when the compatibility level is set to 90.
|
Updating columns by using a two-way assignment produces expected results because only the statement starting value of the column is accessed during statement execution.
|
Low
|
|
Variable assignment is allowed in a statement containing a top-level UNION operator, but returns unexpected results. For example, in the following statements, local variable @v is assigned the value of the column BusinessEntityID from the union of two tables. By definition, when the SELECT statement returns more than one value, the variable is assigned the last value that is returned. In this case, the variable is correctly assigned the last value, however, the result set of the SELECT UNION statement is also returned.
ALTER DATABASE AdventureWorks2012
SET compatibility_level = 90;
GO
USE AdventureWorks2012;
GO
DECLARE @v int;
SELECT @v = BusinessEntityID FROM HumanResources.Employee
UNION ALL
SELECT @v = BusinessEntityID FROM HumanResources.EmployeeAddress;
SELECT @v;
|
Variable assignment is not allowed in a statement containing a top-level UNION operator. Error 10734 is returned.
To resolve the error, rewrite the query as shown in the following example.
DECLARE @v int;
SELECT @v = BusinessEntityID FROM
(SELECT BusinessEntityID FROM HumanResources.Employee
UNION ALL
SELECT BusinessEntityID FROM HumanResources.EmployeeAddress) AS Test;
SELECT @v;
|
Low
|
|
The ODBC function {fn CONVERT()} uses the default date format of the language. For some languages, the default format is YDM, which can result in conversion errors when CONVERT() is combined with other functions, such as {fn CURDATE()}, that expect a YMD format.
|
The ODBC function {fn CONVERT()} uses style 121 (a language-independent YMD format) when converting to the ODBC data types SQL_TIMESTAMP, SQL_DATE, SQL_TIME, SQLDATE, SQL_TYPE_TIME, and SQL_TYPE_TIMESTAMP.
|
Low
|
|
The ODBC function {fn CURDATE()} returns only the date in the format 'YYYY-MM-DD'.
|
The ODBC function {fn CURDATE()} returns both date and time, for example 'YYYY-MM-DD hh:mm:ss.
|
Low
|
|
Datetime intrinsics such as DATEPART do not require string input values to be valid datetime literals. For example, SELECT DATEPART (year, '2007/05-30') compiles successfully.
|
Datetime intrinsics such as DATEPART require string input values to be valid datetime literals. Error 241 is returned when an invalid datetime literal is used.
|
Low
|