SQL 서버에 파일이 있는지 확인하시겠습니까?
솔루션: http://www.tech-recipes.com/rx/30527/sql-server-how-to-check-if-a-file-exists-in-a-directory/
다른 사람들을 돕기 위해 스택 오버플로 질문을 사용하여 이 질문에 대한 게시물을 작성했습니다.
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
저는 제 DB 서버에 이와 같은 테이블을 만들고 파일 경로를 파일 경로 열에 저장했습니다. 이제 sql을 사용하여 파일이 제 컴퓨터에 있는지 확인해야 합니다. 파일이 있으면 테이블에 예, 없으면 없음으로 표시되는 임시 열을 추가해야 합니다.
이 코드는 1개의 파일에 사용할 수 있는 코드를 작성했지만 테이블에 사용하는 방법을 모르겠습니다.
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
최종 출력은 다음과 같아야 합니다.
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
다음과 같은 함수를 만듭니다.
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
테이블을 편집하고 계산된 열(IsExists BIT)을 추가합니다.식을 다음으로 설정합니다.
dbo.fn_FileExists(filepath)
그런 다음 다음을 선택합니다.
SELECT * FROM dbo.MyTable where IsExists = 1
업데이트:
계산된 열 외부에서 함수를 사용하는 방법
select id, filename, dbo.fn_FileExists(filename) as IsExists
from dbo.MyTable
업데이트:
함수가 알려진 파일에 대해 0을 반환하면 권한 문제가 있을 수 있습니다.SQL Server 계정에 폴더 및 파일에 액세스할 수 있는 충분한 권한이 있는지 확인합니다.읽기 전용이면 충분합니다.
또한 예, 기본적으로 'NETWORK SERVICE' 계정에는 대부분의 폴더에 대한 권한이 충분하지 않습니다.문제의 폴더를 마우스 오른쪽 단추로 클릭하고 '속성'을 선택한 다음 '보안' 탭을 클릭합니다.'편집'을 클릭하고 '네트워크 서비스'를 추가합니다.'적용'을 클릭하고 다시 테스트하십시오.
테스트되지 않았지만 다음과 같은 방법을 시도할 수 있습니다.
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
커서를 사용하여 이를 달성할 수 있지만 루프하는 동안보다 성능이 훨씬 느립니다.코드는 다음과 같습니다.
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
또는 프론트엔드에 통합하려면 tempTable에 넣을 수 있습니다.
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
그런 다음 다음을 사용하여 호출:
exec GetFileStatus
다음 코드를 사용하여 파일이 있는지 확인합니다.사용자 기능을 생성하여 저장 프로시저에서 사용할 수 있습니다. 필요에 따라 수정하십시오.
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
언급URL : https://stackoverflow.com/questions/11740000/check-for-file-exists-or-not-in-sql-server
'programing' 카테고리의 다른 글
ggplot2의 중심 그림 제목 (0) | 2023.07.02 |
---|---|
VB에서 String ENUM을 정의합니다.그물 (0) | 2023.07.02 |
Windows 7(윈도우 7)에서 폴더에 쓰기 위한 ASP.NET 권한을 부여하려면 어떻게 해야 합니까? (0) | 2023.07.02 |
MongoDB mapreduce에서 values 객체를 평탄화하려면 어떻게 해야 합니까? (0) | 2023.07.02 |
응용프로그램에 "암호화 포함"이 있습니까? (0) | 2023.07.02 |