Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如果SQL Server中存在具有逻辑名称的变量,如何删除数据库?_Sql Server_Localdb - Fatal编程技术网

Sql server 如果SQL Server中存在具有逻辑名称的变量,如何删除数据库?

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

我创建了一个包含数据库逻辑名称的变量,如果LocalDB中存在该变量,则将其删除

我在当前代码中面临的问题是,它只搜索现有数据库的物理名称

我有一个逻辑名称为“Development”的数据库,它不会被删除

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删除时数据库未脱机。我也没有重命名数据库。但是,我不是数据库的创建者,因此物理名称与创建者存储数据库的位置不同。谢谢,我将尝试使用物理名称。