repo_sys.IndexColumn_unique - V

type: V ( view ), modify_date: 2022-01-05 18:06:34

RepoObject_guid: 6090291C-9D61-EB11-84DC-A81E8446D5B0

Description

Examples

Entity Diagram

entity-repo_sys.indexcolumn_unique

Columns

Table 1. Columns of repo_sys.IndexColumn_unique - V
PK Column Name Data Type NULL? ID

int

NOT NULL

uniqueidentifier

NULL

int

NOT NULL

sysname

NULL

bit

NULL

bit

NULL

bit

NULL

bit

NULL

uniqueidentifier

NULL

nvarchar(128)

NULL

nvarchar(261)

NULL

nvarchar(128)

NULL

uniqueidentifier

NULL

sysname

NULL

nvarchar(182)

NULL

Foreign Key Diagram

entity_1_1_fk-repo_sys.indexcolumn_unique

References

Object Reference Diagram - 1 1

entity_1_1_objectref-repo_sys.indexcolumn_unique

Object Reference Diagram - Referenced - 30 0

entity_30_0_objectref-repo_sys.indexcolumn_unique

Object Reference Diagram - Referencing - 0 30

entity_0_30_objectref-repo_sys.indexcolumn_unique

Column Reference Diagram

entity_1_1_colref-repo_sys.indexcolumn_unique

Indexes

idx_IndexColumn_unique__1

idx_IndexColumn_unique__2

idx_IndexColumn_unique__3

Column Details

_

index_column_id

index_column_id

int

NOT NULL

index_guid

index_guid

uniqueidentifier

NULL

index_id

index_id

int

NOT NULL

index_name

index_name

sysname

NULL

is_descending_key

is_descending_key

bit

NULL

is_index_primary_key

is_index_primary_key

bit

NULL

is_index_real

is_index_real

bit

NULL

is_index_unique

is_index_unique

bit

NULL

parent_RepoObject_guid

parent_RepoObject_guid

uniqueidentifier

NULL

parent_schema_name

parent_schema_name

nvarchar(128)

NULL

parent_SysObject_fullname

parent_SysObject_fullname

nvarchar(261)

NULL

Description

(concat('[',[SysObject_schema_name],'].[',[SysObject_name],']'))


parent_SysObject_name

parent_SysObject_name

nvarchar(128)

NULL

RepoObjectColumn_guid

RepoObjectColumn_guid

uniqueidentifier

NULL

SysObject_column_name

SysObject_column_name

sysname

NULL

SysObject_column_user_type_fullname

SysObject_column_user_type_fullname

nvarchar(182)

NULL

sql_modules_definition

repo_sys.IndexColumn_unique - V script
/*
Index hat folgende Eindeutigkeiten

- RepoObject_guid
- Schema.NameDesIndex - kann sich aber ändern, wenn der Index umbenannt wird
- Parent-Objekt (Tabelle) + NameDesIndex - kann sich auch ändern
- object_id des Index in der Datenbank
  - hier in der Sicht nicht enthalten, müsste oder könnte man joinen über sys.Object oder sys.key_constraints
  - ist aber wenig nützlich, wenn es auch virtuelle Index geben soll, die nicht in der Datenbank erstellt werden können und somit keine object_id bekommen

Kombination mit virtuellen Index

- Schema.NameDesIndex müssen auch für die UNION aus echten und virtuellen Index unique sein
- Ablage
  - eine gemeinsame Tabelle (UK einfach möglich)
  - separate Tabellen und UNION ALL
    - wenn WITH SCHEMABINDING, dann wäre auch ein UK möglich
	  - da die Quellen aber System-Sichten sind, geht SCHEMABINDING nicht
	- man bräuchte sich nur um die Tabelle mit den virtuellen Index kümmern, die echten wären immer über diese Sicht aktuell
	  zumindest nach einem sync der guid wegen repo_sys.SysColumn_RepoObjectColumn_via_column_name

semantische Gruppen müssen aber ebenfalls (und vor allem) den echten Index zugeordnet werden, dafür wird also eh eine Tabelle benötigt

*/
CREATE View repo_sys.IndexColumn_unique
As
--
Select
    index_guid                          = sc_ro.RepoObject_guid
  , sic.index_column_id
  , sic.is_descending_key
  , sc_roc.RepoObjectColumn_guid                                 --could by empty for new Objects, execute [repo].[usp_sync_guid]
  , parent_RepoObject_guid              = sc_roc.RepoObject_guid --could by empty for new Objects, execute [repo].[usp_sync_guid]
  , index_name                          = si.name Collate Database_Default
  , parent_schema_name                  = sc_roc.SysObject_schema_name
  , parent_SysObject_name               = sc_roc.SysObject_name
  , sc_roc.SysObject_column_name
  , SysObject_column_user_type_fullname = sc_roc.user_type_fullname
  , is_index_unique                     = si.is_unique
  , is_index_primary_key                = si.is_primary_key
  , parent_SysObject_fullname           = sc_roc.SysObject_fullname
  , is_index_real                       = Cast(1 As Bit)
  , sic.index_id
--, [sic].[key_ordinal]
--, [si].[type] AS                   [index_type]
--, [si].[type_desc] AS              [index_type_desc]
--, [si].[is_unique_constraint] AS   [is_index_unique_constraint]
--  --
--, [sic].object_id
--, [sic].[column_id]
--, [sic].[partition_ordinal]
--, [sic].[is_included_column]
--, [sic].[column_store_order_ordinal]
--  --, [si].[data_space_id]
--  --, [si].[ignore_dup_key]
--, [si].[fill_factor]
--, [si].[is_padded]
--, [si].[is_disabled]
--, [si].[is_hypothetical]
--, [si].[is_ignored_in_optimization]
--, [si].[allow_row_locks]
--, [si].[allow_page_locks]
--, [si].[has_filter]
--, [si].[filter_definition]
--, [si].[compression_delay]
--, [si].[suppress_dup_key_messages]
--, [si].[auto_created]
--, [si].[optimize_for_sequential_key]
From
    sys_dwh.index_columns                        As sic
    Inner Join
        sys_dwh.indexes                          As si
            On
            sic.object_id                   = si.object_id
            And sic.index_id                = si.index_id

    Inner Join
        repo.SysColumn_RepoObjectColumn_via_name As sc_roc
            On
            sic.object_id                   = sc_roc.SysObject_id
            And sic.column_id               = sc_roc.SysObject_column_id

    Left Join
        repo.SysObject_RepoObject_via_name       As sc_ro
            On
            sc_ro.SysObject_name            = si.name Collate Database_Default
            And sc_ro.SysObject_schema_name = sc_roc.SysObject_schema_name
Where
    si.is_unique = 1