SQL Server xp_cmdshell查询:将变量添加到命令

时间:2018-11-01 23:51:49

标签: sql-server xp-cmdshell

我的查询工作正常,但是我希望能够在命令中添加日期值变量。

这是我到目前为止所拥有的:

DECLARE @varDate DATE

SET @varDate = CAST(DATEADD(day, -1, GETDATE()) AS DATE)

EXEC master..xp_cmdshell 'SQLCMD -E -S "EMERALDSERVER\LASERFICHERIO" -s"," -W -Q "SET NOCOUNT ON EXEC PullSageData.[dbo].[Report_Daily_Superintendent_Jobs]" | findstr /V /C:"-" /B > C:\Laserfiche\import\Reports\Reports_"+@varDate+".csv'

@varDate所在的位置应替换为昨天的日期。

示例文件名:

Reports_2018_10_31.csv

相反,它输出文件名:

Reports+@varDate+.csv

我的猜测是,在单引号中输入变量不适用于双引号和+,就像我在许多示例中看​​到的那样。

1 个答案:

答案 0 :(得分:1)

您必须创建一个包含所有内容的新变量并从中执行 示例:

declare @varDate date
SET @varDate=CAST(DATEADD(day,-1,GETDATE()) as date)
declare @Script varchar (max) = 'SQLCMD -E -S "EMERALDSERVER\LASERFICHERIO" -s"," -W -Q "SET NOCOUNT ON EXEC PullSageData.[dbo].[Report_Daily_Superintendent_Jobs]" | findstr /V /C:"-" /B > C:\Laserfiche\import\Reports\Reports_varDate.csv'
declare @cmd varchar(max)= replace(@Script,'@varDate',@varDate)
EXEC master..xp_cmdshell @cmd