2011-02-24 5 views
0

파일 이름이 테이블에서 고유한지 확인하는 SQL 쿼리를 작성했습니다. 전달 된 매개 변수가 NULL이면 확인하기 전에 임의의 값이 지정됩니다.어쨌든이 SQL 쿼리를 "압축"할 수 있습니까?

SET @FileName=REPLACE(ISNULL(@FileName, dbo.fn_String_GenerateRandom(NEWID(), 10)), ' ', '-') 
DECLARE @i int,@FileNameCheck nvarchar(200); SELECT @i=2, @[email protected] 
WHILE (SELECT COUNT(*) FROM [eJournals] WHERE [FileName][email protected]) > 0 
BEGIN 
    SELECT @FileNameCheck = @FileName + '-' + CAST(@i as nvarchar(3)), @[email protected]+1 
END 
SET @FileName = @FileNameCheck 

어쨌든 적은 라인에이를 압축 거기 : 여기

내 코드?

+0

그것은이지만, 장소에 (? 나는 생각하지 않는다)이 SQL 쿼리를 자동으로 수행하지 않는 것을 가지고, 그것은 단지 내가 믿는 제약 조건을 던질 것인가? – Curt

+0

왜이 작업을 수행해야합니까? –

답변

1

어 ... 예.

WHILE에 대한 하나의 문장에 대해서도 BEGIN END를 잃을 수 있습니다. 그리고 세미콜론 또는 2 :를 추가하십시오. 그러나이 경우 명확하게하기위한 것입니다.

SET @FileName=REPLACE(ISNULL(@FileName, dbo.fn_String_GenerateRandom(NEWID(), 10)), ' ', '-'); DECLARE @i int,@FileNameCheck nvarchar(200); SELECT @i=2, @[email protected]; WHILE (SELECT COUNT(*) FROM [eJournals] WHERE [FileName][email protected]) > 0 SELECT @FileNameCheck = @FileName + '-' + CAST(@i as nvarchar(3)), @[email protected]+1; SET @FileName = @FileNameCheck 
+0

Brilliant! 감사합니다. @ gbn 이렇게하면이 코드를 여러 번 사용하는 것이 덜 복잡 해지고 한 줄로 반복하는 것에 대해 나에게 가르쳐줍니다. D – Curt

+0

@ 여러 곳에서이 코드를 사용하는 경우 커튼을 사용하면 안됩니다. 정의 된 사용자를 사용해서는 안됩니다. 함수 대신? 또는 각 코드마다 코드가 약간 변경됩니다. – Seph

+0

@Seph 예, 스크립트를 보면 열 이름과 테이블 이름이 표시됩니다. 이것은 스크립트의 모든 사용과 함께 변경됩니다. – Curt

0

여기에 위의 문제를 해결하는 또 다른 방법은 다음과 같습니다

drop table Filenames 
create table Filenames (fname varchar(200) not null) 
insert into Filenames values ('hello.txt') 
insert into Filenames values ('hello.txt0') 
insert into Filenames values ('hello.txt1') 
declare @fileName varchar(200) = 'hello.txt' 

declare @realFileName varchar(200) = 
    (select top 1 f.fname from 
     (select 0 as rownum, @filename as fname union 
      select 
       row_number() over (order by fname) as rownum, 
       @filename + cast(row_number() over (order by fname) as varchar) as fname 
      from Filenames) as f 
    where f.fname not in (select fname from Filenames) 
    order by f.rownum) 
관련 문제