DB_ID (Transact-SQL)
This function returns the database identification (ID) number of a specified database.
Syntax
DB_ID ( [ 'database_name' ] )
To view Transact-SQL syntax for SQL Server 2014 (12.x) and earlier versions, see Previous versions documentation.
Arguments
‘database_name‘
The name of the database whose database ID number DB_ID will return. If the call to DB_ID omits database_name, DB_ID returns the ID of the current database.
Return types
int
Remarks
DB_ID may only be used to return the database identifier of the current database in Azure SQL Database. NULL is returned if the specified database name is other than the current database.
In Azure SQL Database, DB_ID may not return the same value as the database_id column in sys.databases and sys.database_service_objectives. These two views return database_id values that are unique within the logical server, while DB_ID and the database_id column in other system views return values that are unique within a single database or within an elastic pool.
Permissions
If the caller of DB_ID does not own a specific non-master or non-tempdb database, ALTER ANY DATABASE or VIEW ANY DATABASE server-level permissions at minimum are required to see the corresponding DB_ID row. For the master database, DB_ID needs CREATE DATABASE permission at minimum. The database to which the caller connects will always appear in sys.databases.
By default, the public role has the VIEW ANY DATABASE permission, which allows all logins to see database information. To prevent a login from detecting a database, REVOKE the VIEW ANY DATABASE permission from public, or DENY the VIEW ANY DATABASE permission for individual logins.
Examples
A. Returning the database ID of the current database
This example returns the database ID of the current database.
SELECT DB_ID() AS [Database ID]; GO
B. Returning the database ID of a specified database
This example returns the database ID of the AdventureWorks2022 database.
SELECT DB_ID(N'AdventureWorks2008R2') AS [Database ID]; GO
C. Using DB_ID to specify the value of a system function parameter
This example uses DB_ID to return the database ID of the AdventureWorks2022 database in the system function sys.dm_db_index_operational_stats . The function takes a database ID as the first parameter.
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
Examples: Azure Synapse Analytics and Analytics Platform System (PDW)
D. Return the ID of the current database
This example returns the database ID of the current database.
SELECT DB_ID();
E. Return the ID of a named database.
This example returns the database ID of the AdventureWorksDW2022 database.
SELECT DB_ID('AdventureWorksPDW2012');
DB_ID (Transact-SQL)
Эта функция возвращает идентификационный номер указанной базы данных.
Синтаксис
DB_ID ( [ 'database_name' ] )
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
‘database_name‘
Имя базы данных, идентификационный номер которой вернет функция DB_ID . Если в вызове DB_ID аргумент database_name не указан, функция DB_ID возвращает идентификатор текущей базы данных.
Типы возвращаемых данных
int
Замечания
DB_ID может использоваться только для возврата идентификатора текущей базы данных в Базе данных SQL Azure. Если указанное имя базы данных отличается от текущей базы данных, возвращается значение NULL.
В Базе данных SQL Azure может не возвращать то же значение, DB_ID что database_id и столбец в sys.database и sys.database_service_objectives. Эти два представления возвращают уникальные значения в логическом сервере, а DB_ID database_id столбец в других системных представлениях возвращает database_id значения, уникальные в пределах одной базы данных или в эластичном пуле.
Разрешения
Если участник, вызывающий DB_ID , не является владельцем конкретной базы данных, отличной от базы данных master или tempdb, то минимальными разрешениями, необходимыми для просмотра соответствующей строки DB_ID , являются разрешения уровня сервера ALTER ANY DATABASE или VIEW ANY DATABASE . Для базы данных master функция DB_ID требует по крайней мере разрешения CREATE DATABASE . База данных, к которой подключается вызывающий участник, всегда отображается в представлении sys.databases.
По умолчанию общедоступная роль имеет разрешение VIEW ANY DATABASE , что позволяет всем именам для входа просматривать информацию в базе данных. Чтобы имя для входа не могло обнаруживать базу данных, отзовите общедоступное разрешение VIEW ANY DATABASE с помощью инструкции REVOKE или отмените разрешение VIEW ANY DATABASE для отдельных имен для входа с помощью инструкции DENY .
Примеры
О. Возвращение идентификатора текущей базы данных
В приведенном ниже примере возвращается идентификатор текущей базы данных.
SELECT DB_ID() AS [Database ID]; GO
B. Возвращение идентификатора указанной базы данных
В приведенном ниже примере возвращается идентификатор базы данных AdventureWorks2022 .
SELECT DB_ID(N'AdventureWorks2008R2') AS [Database ID]; GO
C. Использование DB_ID для указания значения параметра системной функции
В приведенном ниже примере функция DB_ID используется для получения идентификатора базы данных AdventureWorks2022 в системной функции sys.dm_db_index_operational_stats . Эта функция принимает идентификатор базы данных в качестве первого параметра.
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
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
D. Получение идентификатора текущей базы данных
В приведенном ниже примере возвращается идентификатор текущей базы данных.
SELECT DB_ID();
Д. Получение идентификатора именованной базы данных
В этом примере возвращается идентификатор базы данных базы данных базы данных AdventureWorksDW2022.
SELECT DB_ID('AdventureWorksPDW2012');
Как узнать id базы sql
Есть T-SQL скрипт, который добавляет запись в таблицу (обычный insert). Как после выполнения этого скрипта узнать идентификатор (ID) вновь созданной записи если он (id) генерируется автоматически на стороне сервера? Можно ли это сделать в том же запросе?
Спросил Fish
968 дн., 19 час., 12 мин. назад
Новые ответы
Тут есть несколько вариантов. Кроме функции @@IDENTITY , о которой написал alexey-algel можно также использовать SCOPE_IDENTITY и IDENT_CURRENT .
IDENT_CURRENT — функция возвращает идентификатор последней записи, добавленной в определенную таблицу. Функция привязана именно к таблице и не привязана к области действия или сеансу. Таким образом следующие два запроса вернут одни и те же результаты:
SELECT IDENT_CURRENT("some_table") SELECT MAX(id) FROM some_table
@@IDENTITY — возвращает идентификатор последней записи, добавленной в текущем сеансе, в любую таблицу.
SCOPE_IDENTITY — возвращает идентификатор последней записи, добавленной в текущем сеансе и в текущей области, в любую таблицу.
С функцией IDENT_CURRENT все понятно — она возвращает id только для указанной таблицы. А вот грань между @@IDENTITY и SCOPE_IDENTITY очень тонкая. Чтобы ее почувствовать можно рассмотреть классический пример. Допустим, в базе есть таблица A. На вставку записи в таблицу A установлен триггер, который добавляет запись в другую таблицу B. Тогда, если выполнить скрипт
INSERT (. ) INTO A VALUES (. ) SELECT SCOPE_IDENTITY
То получим идентификатор новой записи таблицы A. Если же выполним
INSERT (. ) INTO A VALUES (. ) SELECT @@IDENTITY
То получим аналогичный идентификатор из таблицы B. Так происходит потому, что триггер срабатывает в том же сеансе, что и вставка записи, но в другой области. Соответственно, функция @@IDENTITY видит все insert’ы сеанса, а SCOPE_IDENTITY — только текущий insert области.
Как узнать id строки в Базе Данных?
а как определить id пользователя не получается, вернее не понимаю как получить id в переменную.
Все спасибо проблема решена)
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- SQL
- +1 ещё
Массив структур в Hive. Как проверить вхождение в массив структуры по маске?
- 1 подписчик
- вчера
- 72 просмотра
