Startup Prozeduren werden beim Start von SQL Server ausgeführt. Typische Verwendungszwecke sind zum Beispiel:
Um eine Prozedur als Startup Procedure festzulegen, muß man die Systemprozedur sp_procoption ausführen. Nähere Erläuterungen zur Verwendung dieser Prozedur stehen in BOL.
Ja! Aber nur, wenn SQL Server im Single User Modus gestartet wird.
In SQL Server 2000 und früher funktioniert folgendes:
SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA+'.'+TABLE_NAME), COLUMN_NAME,'IsIdentity')=1;
SELECT su.name AS TABLE_NAME, so.name AS TABLE_NAME, sc.name AS COLUMN_NAME
FROM dbo.syscolumns AS sc
JOIN dbo.sysobjects AS so
ON sc.id = so.id
JOIN dbo.sysusers AS su
ON so.uid = su.uid
WHERE sc.status & 0x80 = 0x80;
Im SQL Server 2005 sollte man folgendes verwenden:
SELECT su.name AS SCHEMA_NAME, so.name AS TABLE_NAME, sc.name AS COLUMN_NAME
FROM sys.columns AS sc
JOIN sys.objects AS so
ON sc.object_id = so.object_id
JOIN sys.schemas su
ON su.schema_id = so.schema_id
WHERE sc.is_identity = 1;
Jein! Die direkte Syntax SELECT … FROM EXEC myProcedure ist ungültig und liefert einen Fehler. Es gibt aber einen Umweg über einen View und OPENQUERY:
Typisches Einsatzgebiet ist die Implementierung einer eigenen Protokollierfunktionalität, die Änderungen an Tabellen mitschneidet. Die Arbeitsweise ist stets die gleiche, nur die Tabelle ist immer eine andere.
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_TYPE = 'FUNCTION'
AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(SPECIFIC_SCHEMA) + '.' +
QUOTENAME(SPECIFIC_NAME)),'IsMSShipped') = 0
oder alternativ dazu:
SELECT *
FROM sys.sysobjects -- oder sys.objects
WHERE type IN ('FN', 'IF', 'TF')
SELECT *
FROM sys.sql_modules
WHERE OBJECTPROPERTY(OBJECT_ID,'IsScalarFunction') = 1
OR OBJECTPROPERTY(OBJECT_ID,'IsTableFunction') = 1
OR OBJECTPROPERTY(OBJECT_ID,'IsInlineFunction') = 1