SQL数据库id值是否重用?
当我运行下面的查询时,我会得到每个数据库的database_id字段。我的印象是价值正在被重新利用。例如,我删除数据库,然后恢复新数据库。某些新恢复的数据库的数据库id值可能是旧的。 可能吗?这能改变吗 我问的原因如下。我正在SQL server中的每个数据库上运行查询。我想排除一些数据库,我使用database_id字段来标识我希望在查询中跳过的数据库。但是,如果重复使用数据库id,我必须定期更新查询。 多谢各位SQL数据库id值是否重用?,sql,sql-server,tsql,Sql,Sql Server,Tsql,当我运行下面的查询时,我会得到每个数据库的database_id字段。我的印象是价值正在被重新利用。例如,我删除数据库,然后恢复新数据库。某些新恢复的数据库的数据库id值可能是旧的。 可能吗?这能改变吗 我问的原因如下。我正在SQL server中的每个数据库上运行查询。我想排除一些数据库,我使用database_id字段来标识我希望在查询中跳过的数据库。但是,如果重复使用数据库id,我必须定期更新查询。 多谢各位 SELECT * FROM sys.databases 数据库id可能会更改,
SELECT *
FROM sys.databases
数据库id可能会更改,因此在进行任何类型的比较之前,应使用
DB\u id
函数获取正确的值
此函数返回指定数据库的数据库标识(ID)号
DB_ID ( [ 'database_name' ] )
例如:
SELECT *
FROM sys.master_files
WHERE database_id = DB_ID('my_database_name');
-- instead of
SELECT *
FROM sys.master_files
WHERE database_id = 18; -- database_id may not exists or point to different db
以下是我将要做的,并解决我的情况
使用建议的解决方案,我将运行一个子查询并创建目标表所在的所有数据库的列表。然后,我在该列表中所有可用的数据库上运行查询 它不是持久的,因此可以更改。
数据库\u id
值可以在删除/创建/恢复数据库时重用。这是不可配置的行为。考虑一下为什么你会关心这个问题,所以有人可以提出一个解决方案。“DanGuzman,谢谢你,我编辑了这个问题并提出了这个方案。听起来我应该用数据库名称来代替。@DeepDiver,我同意最好用这个名称。@DeepDiver,正如我前面所说的,不要使用数据库id
,想象你有一个db,然后删除它,然后创建一个db,再创建一个db。如果您使用database\u id
谢谢,我从sys.databases中得到了类似于SELECT*的东西,其中database\u id不在(6,7,8,11,19)
中,但显然无法做到这一点。