2014-03-07 78 views
-3

我正在將文件夾中的文件名獲取到臨時表中。然後我使用一個光標爲每個文件名執行一些操作。當我嘗試用REPLACE替換文件名中的.bak字符串時,它將失敗並報錯 - 必須聲明標量變量「@FILENEME」。爲什麼?如何解決它?REPLACE無法接受varchar變量

碼 - 在REPLACE(@FILENEME, '.bak', '')

CREATE TABLE ##FILES(
Name varchar(200),  
depth numeric,  
isFile numeric 
) 

--Assumption - the sp xp_dirtree has these columns 
- subdirectory, depth, file 
INSERT INTO ##FILES 
EXEC xp_dirtree 'C:\Program Files\Microsoft SQL Server\ 
MSSQL10_50.SS2008\MSSQL\Backup\', 10, 1 


DECLARE @FILENAME AS VARCHAR(200) 
DECLARE @db AS VARCHAR(200) 
DECLARE C CURSOR FOR 
    SELECT Name 
    FROM ##FILES 
    WHERE isFile = 1 
OPEN C 
FETCH NEXT FROM C INTO @FILENAME 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @db = REPLACE(@FILENEME, '.bak', '') 
    print @db 

    FETCH NEXT FROM C INTO @FILENAME 
END 
CLOSE C 
DEALLOCATE C 
+0

我們能否刪除這個問題嗎?這是一個嚴重的錯誤。我們可以將這裏留作漫畫目的 - 我如何犯了一個蹩腳的錯誤,以及其他人如何連續回答同樣的問題,好像有5種方法可以糾正相同的錯字。 – Steam

+0

你無法自己刪除它嗎? – admdrew

+0

@admdrew - 它有一個upvoted的答案,所以它不能被OP刪除。 – ChrisF

回答

3

簡單的拼寫錯誤..

使用此REPLACE(@FILENAME, '.bak', '')


CREATE TABLE ##FILES(
Name varchar(200),  
depth numeric,  
isFile numeric 
) 

--Assumption - the sp xp_dirtree has these columns 
- subdirectory, depth, file 
INSERT INTO ##FILES 
EXEC xp_dirtree 'C:\Program Files\Microsoft SQL Server\ 
MSSQL10_50.SS2008\MSSQL\Backup\', 10, 1 


DECLARE @FILENAME AS VARCHAR(200) 
DECLARE @db AS VARCHAR(200) 
DECLARE C CURSOR FOR 
    SELECT Name 
    FROM ##FILES 
    WHERE isFile = 1 
OPEN C 
FETCH NEXT FROM C INTO @FILENAME 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    SET @db = REPLACE(@FILENAME, '.bak', '') 
    print @db 

    FETCH NEXT FROM C INTO @FILENAME 
END 
CLOSE C 
DEALLOCATE C