Sql server 如果SQL Server中存在具有逻辑名称的变量,如何删除数据库?
我创建了一个包含数据库逻辑名称的变量,如果LocalDB中存在该变量,则将其删除 我在当前代码中面临的问题是,它只搜索现有数据库的物理名称 我有一个逻辑名称为“Development”的数据库,它不会被删除Sql server 如果SQL Server中存在具有逻辑名称的变量,如何删除数据库?,sql-server,localdb,Sql Server,Localdb,我创建了一个包含数据库逻辑名称的变量,如果LocalDB中存在该变量,则将其删除 我在当前代码中面临的问题是,它只搜索现有数据库的物理名称 我有一个逻辑名称为“Development”的数据库,它不会被删除 DECLARE @dbname nvarchar(128) SET @dbname = 'Development' IF(EXISTS(SELECT NULL FROM sys.databases WHERE ('[' + name + ']' = @dbname O
DECLARE @dbname nvarchar(128)
SET @dbname = 'Development'
IF(EXISTS(SELECT NULL FROM sys.databases
WHERE ('[' + name + ']' = @dbname OR name = @dbname )))
BEGIN
DECLARE @sql VARCHAR(MAX)
SELECT @sql = COALESCE(@sql,'') + 'Kill ' + Convert(varchar, SPId) + ';'
FROM MASTER..SysProcesses
WHERE DBId = DB_ID(@dbname) AND SPId <> @@SPId
EXEC(@sql)
EXEC('DROP DATABASE ' + @dbname);
PRINT 'Existing database removed'
END
ELSE
BEGIN
PRINT 'Database not present';
END
我得到的结果是打印“数据库不存在”,并且数据库没有被删除。
我想要的是一个已删除的数据库.mdf和.ldf执行查询的用户可能没有查看数据库的权限
SELECT * FROM sys.databases
如果sys.databases的调用方不是数据库的所有者,并且
数据库不是master或tempdb,这是所需的最低权限
要查看对应的行,请更改任何数据库或查看任何
数据库服务器级权限,或在中创建数据库权限
主数据库。调用方所连接的数据库可以
始终在sys.databases中查看
取自
尝试在SSMS中运行以下查询,以检查是否可以看到您的数据库
SELECT * FROM sys.databases
数据库没有逻辑名称development。它包含的一个文件具有该逻辑名称
获取与您可以使用的逻辑文件名对应的数据库名
SELECT DB_NAME(database_id)
FROM sys.master_files
WHERE name = 'Development'
然后将其分配给@dbname-可能会有多个结果。无法保证逻辑文件名在数据库中是唯一的sys.databases表中的数据库名不被引用。因此,一个愚蠢地称为My Stuly[database]name的数据库的名称值应该是My Stuly[database]name,而不是“[My Stuly[database]]name]”。另外,我建议您引用EXEC'DROP DATABASE'+@dbname;EXEC'DROP DATABASE'+QUOTENAME@dbname;逻辑数据库名称是什么意思?我从未听说过这一点,也没有看到任何有希望的搜索结果数据库在删除/删除时处于脱机状态?你重命名数据库了吗?如果是,您必须提到在中使用的物理数据库名称server@MartinSmith对于逻辑数据库名称,我指的是数据库在服务器上的名称,这是一个简单的简短单词。另一种选择是物理名称,它是.mdf文件的完整路径。@CR241删除时数据库未脱机。我也没有重命名数据库。但是,我不是数据库的创建者,因此物理名称与创建者存储数据库的位置不同。谢谢,我将尝试使用物理名称。