2. Ihr Kursleiter
n Roland Strauss
n Kaufm. Lehre/Programmierer/Analytiker
n Selbstständig seit 1984
n SQL Server seit Version 4.2 (1993)
n Kursleiter SQL Server seit 1994
3. Neue Befehle
n WITH RESULT SETS
n OFFSET AND FETCH
n THROW in Error handling
n SEQUENCE
n Get Metadata of Resultset
4. EXEC Proc WITH ...
[ WITH <execute_option> [ ,…n ] ]
<execute_option>::=
{
RECOMPILE
| { RESULT SETS UNDEFINED }
| { RESULT SETS NONE }
| { RESULT SETS ( <result_sets_definition> [,…n] ) }
}
<result_sets_definition> ::=
{
(
{ column_name
data_type
[ COLLATE collation_name ]
[ NULL | NOT NULL ] }
[,…n ]
)
| AS OBJECT
[ db_name . [ schema_name ] . | schema_name . ]
{table_name | view_name | table_valued_function_name }
| AS TYPE [ schema_name.]table_type_name
| AS FOR XML
}
5. WITH RESULT SETS
CREATE
PROCEDURE
Denali_WithResultSet
AS
BEGIN
SELECT
1
as
No,’Tsql’
Type,
‘WithResultSet’
AS
Feature
UNION
ALL
SELECT
2
as
No,’Tsql’
Type,
‘Throw’
AS
Feature
UNION
ALL
SELECT
3
as
No,’Tsql’
Type,
‘Offset’
AS
Feature
UNION
ALL
SELECT
4
as
No,’Tsql’
Type,
‘Sequence’
AS
Feature
END
GO
EXEC
Denali_WithResultSet
WITH
RESULT
SETS
(
(
No
int,
FeatureType
varchar(50),
FeatureName
varchar(50)
)
)
6. OFFSET and FETCH
ORDER
BY
order_by_expression
[
COLLATE
collation_name
]
[
ASC
|
DESC
]
[
,...n
]
[
<offset_fetch>
]
<offset_fetch>
::=
{
OFFSET
{
integer_constant
|
offset_row_count_expression
}
{
ROW
|
ROWS
}
[
FETCH
{
FIRST
|
NEXT
}
{integer_constant
|
fetch_row_count_expression
}
{
ROW
|
ROWS
}
ONLY
]
}
7. OFFSET and FETCH
SELECT
ProductID,
Name
FROM
Production.Product
ORDER
BY
NAME
OFFSET
10
ROWS
FETCH
NEXT
5
ROWS
ONLY
8. THROW
n Bisher signalisierte man einen Fehler mit RAISERROR
(nnnnn,
16,
1)
n Fehlermeldung musste in sys.messages existieren
n Fehler konnte nicht im CATCH-Block wiederholt werden
n Mit Throw kann eine beliebige Fehlernummer verwendet werden
n Ausführung von Throw ohne Parameter im CATCH Block wiederholt
die auslösende Fehlermeldung
10. THROW
BEGIN
TRY
BEGIN
TRANSACTION
-‐-‐
Start
the
transaction
-‐-‐
Delete
the
Customer
DELETE
FROM
Customers
WHERE
EmployeeID
=
‘CACTU’
-‐-‐
Commit
the
change
COMMIT
TRANSACTION
END
TRY
BEGIN
CATCH
-‐-‐
There
is
an
error
ROLLBACK
TRANSACTION
-‐-‐
Re
throw
the
exception
THROW
END
CATCH
11. SEQUENCE
n Globale IDENTITY
n Steht nicht unter Transaktionskontrolle
CREATE
SEQUENCE
[schema_name
.
]
sequence_name
[
AS
[
built_in_integer_type
|
user-‐
defined_integer_type
]
]
[
START
WITH
<constant>
]
[
INCREMENT
BY
<constant>
]
[
{
MINVALUE
[
<constant>
]
}
|
{
NO
MINVALUE
}
]
[
{
MAXVALUE
[
<constant>
]
}
|
{
NO
MAXVALUE
}
]
[
CYCLE
|
{
NO
CYCLE
}
]
[
{
CACHE
[
<constant>
]
}
|
{
NO
CACHE
}
]
[
;
]
12. SEQUENCE
CREATE
SEQUENCE
dbo.Seq
AS
INT
START
WITH
1
INCREMENT
BY
1;
CREATE
TABLE
dbo.Examp1
(
Seq
INT
NOT
NULL,
Name
VARCHAR(50)
NOT
NULL
);
INSERT
INTO
dbo.Examp1(Seq,
Name)
VALUES(NEXT
VALUE
FOR
dbo.Seq,
‘Tom’);
13. Get Metadata of ResultSets
n Erzeugt detaillierte Beschreibung des Result Sets
sp_describe_first_result_set
@tsql
=
N’SELECT
*
FROM
customers’