A minap szükségem volt arra, hogy egy alkalmazásom elérje az összes felhasználó által létrehozott tábla összes sorát egy MS SQL adatbázisban. Mit is használunk erre?
Igen a sysobjects, syscolumns (és a systypes) rendszer nézeteket!
Valahogy így:
SELECT
o.name AS Tábla
,c.name AS Mező
,t.name AS Adattípus
FROM Sysobjects o
INNER JOIN Syscolumns c ON o.id = c.id AND o.xtype='U'
INNER JOIN Systypes t ON t.xtype = c.xtype
Mit is látunk?
Sysobjects –ben a legfontosabb rendszer objektumok kérdezhetőek le bármely megdöbbentő is :)
Itt ömlesztve szerepelnek a különböző típusok melyet az xtype-ra szűrve tudunk szűkíteni típus alapján. Az 'U' a felhasználó által definiált tábla típust jelenti. (A lehetséges értékek a post végén)
SysColumns a mezőket tárolja el (szintén ömlesztve az összes táblához), míg a systypes-ba a lehetséges típusok vannak.
Részletesen a három nézetről itt, itt és itt.
A sysobjects típusai pedig (2008 R2 esetében):
Kód | Leírás |
AF | Aggregate function (CLR) |
C | CHECK constraint |
D | DEFAULT (constraint or stand-alone) |
F | FOREIGN KEY constraint |
FN | SQL scalar function |
FS | Assembly (CLR) scalar-function |
FT | Assembly (CLR) table-valued function |
IF | SQL inline table-valued function |
IT | internal table |
P | SQL Stored Procedure |
PC | Assembly (CLR) stored-procedure |
PG | Plan guide |
PK | PRIMARY KEY constraint |
R | Rule (old-style, stand-alone) |
RF | Replication-filter-procedure |
S | System base table |
SN | Synonym |
SQ | Service queue |
TA | Assembly (CLR) DML trigger |
TF | SQL table-valued-function |
TR | SQL DML trigger |
TT | Table type |
U | Table (user-defined) |
UQ | UNIQUE constraint |
V | View |
X | Extended stored procedure |