Comparez les prix des domaines et des services informatiques des vendeurs du monde entier

Impossible de supprimer la base de données SQL Server via le fichier exécutable de la ligne de commande

Lorsque vous exécutez un fichier de ligne de commande exécutable, une des tâches - Supprimer la base de données. Quand il commence, SQL Server me dit que

'DBName' does not exist or you do not have permission

. L'existence de la base de données est confirmée. À ce stade du script, il a déjà été traduit en mode hors connexion et traduit en mode utilisateur unique. (Pour vous assurer qu'il n'y a pas de connexions actives avant de supprimer). Pourquoi le programme ne peut-il pas réinitialiser la base de données?

Edit: l'utilisateur avec qui je travaille peut supprimer la base de données manuellement à travers SQL Server Management Studio.

Le fichier de ligne de commande exécutable que je exécute est en réalité un programme compilé C #, qui effectue

DROP DATABASE

Opérateur SQL de l'autre côté System.Data.SqlClient.SqlConnection. Il se connecte à K. SQL Server en utilisant les mêmes informations d'identification (localhost Avec sécurité intégrée), Qui ont été utilisés pour se connecter via l'interface graphique.

Exécution réelle SQL (Copie / Boîte B. SQL Server pour tester):

IF EXISTS (SELECT name FROM sys.databases WHERE name = N'DBName') DROP DATABASE DBName

ÉDITER 2: Ce programme fonctionne sur ma voiture. (tm), Mais pas sur le serveur distant sur lequel il doit être lancé.
Invité:

Emilie

Confirmation de:

Suivi des processus (www.sysinternals.com) Vous vous direz s'il y a un problème avec des autorisations au niveau du fichier et si le fichier de ligne de commande exécutable fonctionne vraiment pour l'utilisateur que vous attendez.

Malgré cela, essayez la chaîne de connexion sql auth comparé à Windows auth, Que vous utilisez. Cela peut vous aider à réduire les problèmes d'autorisations, si elles sont connectées aux autorisations.

Christine

Confirmation de:

Je suppose que le transfert de celui-ci au régime mono-utilisateur (ou la traduction hors ligne) conduit au fait que System.Data.SqlClient.SQLConnection Perd l'esprit.

Ceci, et je suppose que votre connexion est installée avec la base de données principale lorsque vous effectuez cet opérateur?

Vous pouvez également essayer quelque chose comme ce qui suit pour tuer les connexions manuellement (Notez qu'il peut / causera le chaos - Mais puisque vous détruisez toujours la base de données ... Je crois que ces conditions ne comptent pas beaucoup).

USE master
GO


DECLARE killer CURSOR LOCAL FAST_FORWARD FOR
SELECT
spid
FROM
dbo.sysprocesses
WHERE
dbid = DB_ID('dbname here')

DECLARE @spid int
DECLARE @sql nvarchar(20)

OPEN killer

FETCH NEXT FROM killer INTO @spid
WHILE @@FETCH_STATUS = 0 BEGIN

SET @sql = N'KILL ' + CAST(@spid as nvarchar(5))

EXEC sp_executesql @sql

FETCH NEXT FROM killer INTO @spid
END

CLOSE killer
DEALLOCATE killer
GO

WAITFOR DELAY '00:00:00.500'

Pour répondre aux questions, connectez-vous ou registre