2017-10-10 1 views
0

J'ai le code suivant pour mettre à jour docPath domaine, je besoin d'aide sur la façon de vérifier l'existence d'un fichier avant d'exécuter l'instruction de mise à jour ou mettre à jour uniquement si le fichier existe dans le répertoire Sinon, passezComment puis-je vérifier l'existence de fichiers

INSERT INTO DocPath(itemId,docPath) 
SELECT 
    itemId, 
    '\\ABC-SERVER\Data\PRODUCTION\VAULT\2500000 - 2599999 \PDF\'' 
    +[WITESTCO].[dbo].[WIITEMX].[itemId] 
    +'.pdf' as docPath 
    FROM [WITESTCO].[dbo].[WIITEMX] 
    WHERE 
     itemId like '2500%' or itemId like '2501%' ; 
+0

Copie possible de [Vérifier que le fichier existe ou non dans le serveur sql?] (Https://stackoverflow.com/questions/11740000/check-for-file-exists-or-not-in- sql-server) –

Répondre

0

Créer une fonction comme celui-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 

Et utiliser la fonction comme celui-ci

IF dbo.fn_FileExists('MyPath') = 1 
INSERT INTO DocPath(itemId,docPath) 
SELECT itemId,'MyPath' ...; 

Similaire à this question

+0

N'est-il pas possible que le fichier puisse être supprimé après l'appel de la fonction mais avant le traitement de l'instruction INSERT? – STLDeveloper

+0

Bien sûr, c'est possible, mais comme je sais, il est impossible de verrouiller le fichier à être retiré de la transaction de base de données. –

+0

Dans ce cas, le problème d'origine peut toujours exister. Ne serait-il pas mieux dans ce cas de gérer l'erreur? – STLDeveloper