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.