xp_fileexist verificar services existe datos comprueba catálogo buscar archivo sql sql-server sql-server-2008

services - verificar si existe archivo sql server



Compruebe si el archivo existe o no en el servidor sql (4)

Crea una función como esta:

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

Edite su tabla y agregue una columna calculada (IsExists BIT). Establezca la expresión a:

dbo.fn_FileExists(filepath)

Luego solo selecciona:

SELECT * FROM dbo.MyTable where IsExists = 1

Actualización :

Para usar la función fuera de una columna calculada:

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

Actualización :

Si la función devuelve 0 para un archivo conocido, entonces es probable que haya un problema de permisos. Asegúrese de que la cuenta de SQL Server tenga suficientes permisos para acceder a la carpeta y los archivos. Solo lectura debería ser suficiente.

Y SÍ, de forma predeterminada, la cuenta ''SERVICIO DE RED'' no tendrá suficiente derecho en la mayoría de las carpetas. Haga clic derecho en la carpeta en cuestión y seleccione ''Propiedades'', luego haga clic en la pestaña ''Seguridad''. Haga clic en ''Editar'' y agregue ''Servicio de red''. Haga clic en ''Aplicar'' y vuelva a probar.

Solución: http://www.tech-recipes.com/rx/30527/sql-server-how-to-check-if-a-file-exists-in-a-directory/

Hizo una publicación sobre esta pregunta usando la pregunta de stackoverflow para ayudar a otros.

id filepath 1 C:/vishwanath/21776656.docx 2 C:/vishwanath/vish/s_srv_req_2009.txt 3 C:/Users/dalvi/DW/DW20SharedAmd64.exe 4 C:/Users/dalvi/1.txt

Tengo una tabla como esta creada en mi servidor de bases de datos, he almacenado rutas de archivos en la columna de ruta de archivos, ahora debo verificar usando SQL si el archivo existe en mi máquina, si existe, necesito agregar una columna temporal en mi tabla que muestra sí si existe y no, no existe.

Escribí este código que funciona para 1 archivo. Pero no sé cómo usarlo para mi tabla.

DECLARE @isExists INT exec master.dbo.xp_fileexist ''C:/vishwanath/21776656.docx'', @isExists OUTPUT SELECT case @isExists when 1 then ''Yes'' else ''No'' end as isExists

La salida final debería gustar esto

id filepath Isexists 1 C:/vishwanath/21776656.docx Yes 2 C:/vishwanath/vish/s_srv_req_2009.txt Yes 3 C:/Users/dalvi/DW/DW20SharedAmd64.exe Yes 4 C:/Users/dalvi/1.txt No


No probado, pero puedes probar algo como esto:

Declare @count as int Set @count=1 Declare @inputFile varchar(max) Declare @Sample Table (id int,filepath varchar(max) ,Isexists char(3)) while @count<(select max(id) from yourTable) BEGIN Set @inputFile =(Select filepath from yourTable where id=@count) DECLARE @isExists INT exec master.dbo.xp_fileexist @inputFile , @isExists OUTPUT insert into @Sample Select @count,@inputFile ,case @isExists when 1 then ''Yes'' else ''No'' end as isExists set @count=@count+1 END


Pruebe el siguiente código para verificar si el archivo existe. Puede crear una función de usuario y usarla en su procedimiento almacenado. modifíquelo como lo necesite:

Set NOCOUNT ON DECLARE @Filename NVARCHAR(50) DECLARE @fileFullPath NVARCHAR(100) SELECT @Filename = N''LogiSetup.log'' SELECT @fileFullPath = N''C:/LogiSetup.log'' create table #dir (output varchar(2000)) DECLARE @cmd NVARCHAR(100) SELECT @cmd = ''dir '' + @fileFullPath insert into #dir exec master.dbo.xp_cmdshell @cmd --Select * from #dir -- This is risky, as the fle path itself might contain the filename if exists (Select * from #dir where output like ''%''+ @Filename +''%'') begin Print ''File found'' --Add code you want to run if file exists end else begin Print ''No File Found'' --Add code you want to run if file does not exists end drop table #dir


Puede lograr esto utilizando un cursor, pero el rendimiento es mucho más lento que whileloop. Aquí está el código:

set nocount on declare cur cursor local fast_forward for (select filepath from Directory) open cur; declare @fullpath varchar(250); declare @isExists int; fetch from cur into @fullpath while @@FETCH_STATUS = 0 begin exec xp_fileexist @fullpath, @isExists out if @isExists = 1 print @fullpath + char(9) + char(9) + ''file exists'' else print @fullpath + char(9) + char(9) + ''file does not exists'' fetch from cur into @fullpath end close cur deallocate cur

o puede ponerlo en una tabla de tentación si desea integrarlo en su interfaz.

create proc GetFileStatus as begin set nocount on create table #tempFileStatus(FilePath varchar(300),FileStatus varchar(30)) declare cur cursor local fast_forward for (select filepath from Directory) open cur; declare @fullpath varchar(250); declare @isExists int; fetch from cur into @fullpath while @@FETCH_STATUS = 0 begin exec xp_fileexist @fullpath, @isExists out if @isExists = 1 insert into #tempFileStatus values(@fullpath,''File exist'') else insert into #tempFileStatus values(@fullpath,''File does not exists'') fetch from cur into @fullpath end close cur deallocate cur select * from #tempFileStatus drop table #tempFileStatus end

luego llámalo usando:

exec GetFileStatus