Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Vérifier si le fichier existe ou non sur le serveur sql ?

Créez une fonction comme celle-ci :

CREATE FUNCTION dbo.fn_FileExists(@path varchar(512))
RETURNS BIT
AS
BEGIN
     DECLARE @result INT
     EXEC master.dbo.xp_fileexist @path, @result OUTPUT
     RETURN cast(@result as bit)
END;
GO

Modifiez votre table et ajoutez une colonne calculée (IsExists BIT). Définissez l'expression sur :

dbo.fn_FileExists(filepath)

Ensuite, sélectionnez :

SELECT * FROM dbo.MyTable where IsExists = 1

Mettre à jour :

Pour utiliser la fonction en dehors d'une colonne calculée :

select id, filename, dbo.fn_FileExists(filename) as IsExists
from dbo.MyTable

Mettre à jour :

Si la fonction renvoie 0 pour un fichier connu, il y a probablement un problème d'autorisations. Assurez-vous que le compte de SQL Server dispose des autorisations suffisantes pour accéder au dossier et aux fichiers. La lecture seule devrait suffire.

Et OUI, par défaut, le compte 'NETWORK SERVICE' n'aura pas les droits suffisants sur la plupart des dossiers. Faites un clic droit sur le dossier en question et sélectionnez 'Propriétés', puis cliquez sur l'onglet 'Sécurité'. Cliquez sur "Modifier" et ajoutez "Service réseau". Cliquez sur "Appliquer" et retestez.