2012-10-04 15 views
1

我正在嘗試運行SQL命令,但我收到的錯誤消息是不是有效標識符在SQL Server中聲明字符串引用

如果我使用這個命令,

EXEC xp_cmdshell N'mkdir C:\Users\PC\Desktop\Backup\1042012' 
GO 

則此命令工作正常

但是,如果我使用這個命令

DECLARE @CurrentDate varchar(50) 
DECLARE @Path varchar(200) 
DECLARE @Command varchar(200) 

SET @CurrentDate = GETDATE() 
SET @Path = N'C:\Users\PC\Desktop\Backup' 
SET @Command = N'xp_cmdshell " ' + 'MKDIR' + ' '+ @Path + '\' + @CurrentDate + '" ' 

EXEC @Command 
GO 

我得到該錯誤信息。與正確或不正確地聲明一個字符串有關。

+0

爲了幫助您排除故障,您可以發出一條SELECT @Command而不是EXEC來查看字符串看起來像你正在建造的東西。 – StingyJack

回答

2

我認爲:在目錄名是不允許的,我把它轉換爲字符串,但它並沒有在其上的時間:

DECLARE @CurrentDate varchar(50) 
DECLARE @Path varchar(200) 
DECLARE @Command varchar(200) 

SET @CurrentDate = CONVERT(VARCHAR(20), GETDATE(), 110) 
SET @Path = N'C:\Users\PC\Desktop\Backup' 
SET @Command = 'MKDIR' + ' '+ @Path + '\' + @CurrentDate 
PRINT @Command 
EXEC xp_cmdshell @Command 
+0

3年後,仍然非常有幫助! :)設置命令行變量時,我永遠無法完全取得引號。 – plditallo

7

我添加了EXEC,一個unicode標識符(N)和single quotes in place of your double-quotes。請讓我們知道這是如何工作的。

DECLARE @CurrentDate varchar(50) 
DECLARE @Path varchar(200) 
DECLARE @Command varchar(200) 

SET @CurrentDate = convert(varchar(30), GETDATE(), 112) 
SET @Path = N'C:\Users\PC\Desktop\Backup' 
SET @Command = N'EXEC xp_cmdshell N''' + 'MKDIR' + ' '+ @Path + '\' + @CurrentDate + '''' 

EXEC (@Command) 
GO 

UPDATE

測試顯示需要格式化日期yyyymmddother formats available),也圓括號周圍EXEC一如既往(感謝,@Lamak)。這給了我們以下目錄,今天

C:\Users\PC\Desktop\Backup\20121004 

順便說一句,我建議在此日期格式,因爲它會按字母順序排序按時間順序排列在你的文件系統,而mmddyyyyddmmyyyy不會。

+0

不要'EXEC'需要括號來執行一個字符串? – Lamak

+0

Oooohh,肯定... –

+0

@TimLehner:我得到這個錯誤信息找不到存儲過程'EXEC xp_cmdshell N'MKDIR C:\ Users \ PC \ Desktop \ Backup \ Oct 4 2012 1:25 PM''。 –