1

我正在尝试运行 SQL 命令,但收到Not a Valid Identifier的错误消息。

如果我使用这个命令,

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

我收到了那个错误信息。是否与正确声明字符串有关。

4

2 回答 2

7

我添加EXEC了 unicode 标识符 ( N) 和单引号来代替双引号。请让我们知道这是如何工作的。

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

更新

测试表明需要将日期格式化为yyyymmdd其他可用格式),并且EXEC像往常一样用括号括起来(感谢@Lamak)。这给了我们以下目录,今天:

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

顺便说一句,我确实推荐这种日期格式,因为它会在您的文件系统中按时间顺序按字母顺序排序,而mmddyyyy不会ddmmyyyy

于 2012-10-04T17:11:39.373 回答
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
于 2012-10-04T17:18:12.420 回答