【问题标题】:SQL Server xp_cmdshell query: add variables to commandSQL Server xp_cmdshell 查询:将变量添加到命令
【发布时间】:2018-11-01 23:51:48
【问题描述】:

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

这是我目前所拥有的:

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

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

【问题讨论】:

    标签: sql-server xp-cmdshell


    【解决方案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
    

    【讨论】:

    • 我唯一修改的是 xp_cmdshell 不能使用 varchar(max),我只是用大字符串大小的 varchar(1000) 替换。谢谢!
    • 这会起作用,但您会收到一条错误消息,指出Could not find stored procedure master..xp_cmdshell @cmd 要修复它,请将上述执行更改为:EXEC (master..xp_cmdshell @cmd)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2015-08-15
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多