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、ユニコード識別子 ( 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 に答える