Home > SQL-Server 2005 > SET OPTIONs abfragen und SSIS-Probleme vermeiden

SET OPTIONs abfragen und SSIS-Probleme vermeiden

Im vorliegenden Fall hatte ich ein Problem mit einem SSIS-Paket dass mit einer Fehlermeldung abgebrochen wurde. Die Fehlermeldung besagte, dass es eine Warnung beim Aufruf der Datenquelle (View) gegeben hätte.

Diese Warnung sollte nach meiner Meinung auch als Warnung und nicht als Fehler behandelt werden. Das Problem war leicht zu beheben, ich musste nur ein Set-Kommando vor der View platzieren dass die ANSI_WARNINGS abschaltet.

 T-SQL |  copy code |? 
1
SET ANSI_WARNINGS OFF

Der View Aufruf liefert jetzt den Returncode 0 zurück und das Paket tut das was es immer hätte tun sollen.

Im Nachhinein stellte sich mir jedoch die Frage, welche SET-Options denn eigentlich für eine aktuell ausgeführte Session gerade aktiv sind und wie diese abgefragt werden können?

Für diesen Zweck stellt SQL-Server die Variable @@OPTIONS zur Verfügung. Hier kann man über eine bitweise UND-Verknüpfung den Status der verschiedenen SET-Optionen bestimmen.

Da mir dies jedoch für den wiederholten Gebrauch zu unhandlich erschien, habe ich mal eben eine kleine Funktion geschrieben die den Status aller Optionen in einer Tabelle zurückliefert:

 T-SQL |  copy code |? 
01
CREATE FUNCTION fn_Get_SetOptions()
02
RETURNS TABLE
03
AS RETURN
04
WITH Options AS
05
(
06
    SELECT    CONVERT(BIT,(@@OPTIONS & 0x0001) / 0x0001) AS DISABLE_DEF_CNST_CHK
07
             ,CONVERT(BIT,(@@OPTIONS & 0x0002) / 0x0002) AS IMPLICIT_TRANSACTIONS
08
             ,CONVERT(BIT,(@@OPTIONS & 0x0004) / 0x0004) AS CURSOR_CLOSE_ON_COMMIT
09
             ,CONVERT(BIT,(@@OPTIONS & 0x0008) / 0x0008) AS ANSI_WARNINGS
10
             ,CONVERT(BIT,(@@OPTIONS & 0x0010) / 0x0010) AS ANSI_PADDING
11
             ,CONVERT(BIT,(@@OPTIONS & 0x0020) / 0x0020) AS ANSI_NULLS
12
             ,CONVERT(BIT,(@@OPTIONS & 0x0040) / 0x0040) AS ARITHABORT
13
             ,CONVERT(BIT,(@@OPTIONS & 0x0080) / 0x0080) AS ARITHIGNORE
14
             ,CONVERT(BIT,(@@OPTIONS & 0x0100) / 0x0100) AS QUOTED_IDENTIFIER
15
             ,CONVERT(BIT,(@@OPTIONS & 0x0200) / 0x0200) AS NOCOUNT
16
             ,CONVERT(BIT,(@@OPTIONS & 0x0400) / 0x0400) AS ANSI_NULL_DFLT_ON
17
             ,CONVERT(BIT,(@@OPTIONS & 0x0800) / 0x0800) AS ANSI_NULL_DFLT_OFF
18
             ,CONVERT(BIT,(@@OPTIONS & 0x1000) / 0x1000) AS CONCAT_NULL_YIELDS_NULL
19
             ,CONVERT(BIT,(@@OPTIONS & 0x2000) / 0x2000) AS NUMERIC_ROUNDABORT
20
             ,CONVERT(BIT,(@@OPTIONS & 0x4000) / 0x4000) AS XACT_ABORT
21
)
22
SELECT * FROM 
23
(
24
    SELECT * FROM Options 
25
    unpivot 
26
    (
27
        IsSet FOR SetOption in 
28
        (
29
             DISABLE_DEF_CNST_CHK
30
            ,IMPLICIT_TRANSACTIONS
31
            ,CURSOR_CLOSE_ON_COMMIT
32
            ,ANSI_WARNINGS
33
            ,ANSI_PADDING
34
            ,ANSI_NULLS
35
            ,ARITHABORT
36
            ,ARITHIGNORE
37
            ,QUOTED_IDENTIFIER
38
            ,NOCOUNT
39
            ,ANSI_NULL_DFLT_ON
40
            ,ANSI_NULL_DFLT_OFF
41
            ,CONCAT_NULL_YIELDS_NULL
42
            ,NUMERIC_ROUNDABORT
43
            ,XACT_ABORT
44
        )
45
    ) unpvt
46
) x
47
GO
48
 
49
-- ---------------- So wird die Funktion aufgerufen ------------------
50
SELECT * FROM [AdventureWorks].[dbo].[fn_Get_SetOptions] ()
51
 
52

Hier noch die Values für die verschiedenen SET-Optionen zum selber verknüpfen:

Werte für die Bestimmung von SET-Optionen aus der @@Options-Variable
1

DISABLE_DEF_CNST_CHK

2

IMPLICIT_TRANSACTIONS

4

CURSOR_CLOSE_ON_COMMIT

8

ANSI_WARNINGS

16

ANSI_PADDING

32

ANSI_NULLS

64

ARITHABORT

128

ARITHIGNORE

256

QUOTED_IDENTIFIER

512

NOCOUNT

1024

ANSI_NULL_DFLT_ON

2048

ANSI_NULL_DFLT_OFF

4096

CONCAT_NULL_YIELDS_NULL

8192

NUMERIC_ROUNDABORT

16384

XACT_ABORT

have fun

KategorienSQL-Server 2005
  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks