Dela via


OBJECT_ID (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Förhandsversion av Microsoft Fabric

Returnerar databasobjektidentifieringsnumret för ett schemaomfattande objekt.

Objekt som inte är schemaomfattande, till exempel DDL-utlösare (Data Definition Language), kan inte frågas med hjälp OBJECT_IDav . För objekt som inte finns i katalogvyn sys.objects hämtar du objektidentifieringsnumren genom att fråga rätt katalogvy. Om du till exempel vill returnera objektidentifieringsnumret för en DDL-utlösare använder du SELECT OBJECT_ID FROM sys.triggers WHERE name = 'DatabaseTriggerLog'.

Transact-SQL syntaxkonventioner

Syntax

OBJECT_ID ( ' [ database_name . [ schema_name ] . | schema_name . ]
  object_name' [ , 'object_type' ] )

Argumentpunkter

N'object_name'

Det objekt som ska användas. object_name är antingen varchar eller nvarchar. Ett varchar-värdeför object_name konverteras implicit till nvarchar. Det är valfritt att ange databas- och schemanamn.

N'object_type'

Objekttypen schemaomfattning. object_type är antingen varchar eller nvarchar. Ett varchar-värdeför object_type konverteras implicit till nvarchar. En lista över objekttyper finns i typkolumnen i sys.objects (Transact-SQL).

Returtyper

int

Exceptions

För ett rumsligt index OBJECT_ID returnerar NULL.

Returnerar NULL vid fel.

En användare kan bara visa metadata för skyddsbara objekt som användaren äger eller som användaren beviljas behörighet för. Det innebär att metadatautsändande, inbyggda funktioner som OBJECT_ID kan returneras NULL om användaren inte har någon behörighet för objektet. För mer information, se inställningar för metadatasynlighet.

Anmärkningar

När parametern till en systemfunktion är valfri antas den aktuella databasen, värddatorn, serveranvändaren eller databasanvändaren. Du måste alltid följa inbyggda funktioner med parenteser.

När ett tillfälligt tabellnamn anges måste databasnamnet komma före det tillfälliga tabellnamnet, såvida inte den aktuella databasen är tempdb. Till exempel:

SELECT OBJECT_ID('tempdb..#mytemptable');

Systemfunktioner kan användas i urvalslistan, i WHERE -satsen och var som helst där ett uttryck tillåts. Mer information finns i Uttryck (Transact-SQL) och WHERE (Transact-SQL).

Exempel

Kodexemplen i den här artikeln använder AdventureWorks2022- eller AdventureWorksDW2022-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.

A. Returnera objekt-ID:t för ett angivet objekt

I följande exempel returneras objekt-ID:t för Production.WorkOrder tabellen i AdventureWorks2022 databasen.

USE master;
GO

SELECT OBJECT_ID(N'AdventureWorks2022.Production.WorkOrder') AS 'Object ID';
GO

B. Kontrollera att ett objekt finns

I följande exempel kontrolleras förekomsten av en angiven tabell genom att kontrollera att tabellen har ett objekt-ID. Om tabellen finns tas den bort. Om tabellen inte finns körs inte -instruktionen DROP TABLE .

USE AdventureWorks2022;
GO

IF OBJECT_ID (N'dbo.AWBuildVersion', N'U') IS NOT NULL
DROP TABLE dbo.AWBuildVersion;
GO

C. Använd OBJECT_ID för att ange värdet för en systemfunktionsparameter

I följande exempel returneras information för alla index och partitioner i Person.Address tabellen i AdventureWorks2022 databasen med hjälp av funktionen sys.dm_db_index_operational_stats .

Anmärkning

Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.

När du använder Transact-SQL-funktionerna DB_ID och OBJECT_ID returnerar ett parametervärde kontrollerar du alltid att ett giltigt ID returneras. Om databasen eller objektnamnet inte kan hittas, till exempel när de inte finns eller stavas felaktigt, returnerar NULLbåda funktionerna . Funktionen sys.dm_db_index_operational_stats tolkas NULL som ett jokerteckenvärde som anger alla databaser eller alla objekt. Eftersom den här åtgärden kan vara oavsiktlig visar exemplet i det här avsnittet det säkra sättet att fastställa databas- och objekt-ID:t.

DECLARE @db_id INT;
DECLARE @object_id INT;

SET @db_id = DB_ID(N'AdventureWorks2022');
SET @object_id = OBJECT_ID(N'AdventureWorks2022.Person.Address');

IF @db_id IS NULL
BEGIN
    PRINT N'Invalid database';
END;
ELSE IF @object_id IS NULL
BEGIN
    PRINT N'Invalid object';
END;
ELSE
BEGIN
    SELECT *
    FROM [sys].dm_db_index_operational_stats(@db_id, @object_id, NULL, NULL);
END;
GO

Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)

D. Returnera objekt-ID:t för ett angivet objekt

I följande exempel returneras objekt-ID:t för FactFinance tabellen i databasen AdventureWorksPDW2022 .

SELECT OBJECT_ID('AdventureWorksPDW2012.dbo.FactFinance') AS 'Object ID';