提问人:Anusha 提问时间:5/31/2023 最后编辑:Anusha 更新时间:5/31/2023 访问量:64
在 SQL xp_cmdshell 中使用带有 % 运算符的 LIKE 通配符
Using LIKE wildcard with % operator in SQL xp_cmdshell
问:
我正在尝试在xp_cmdshell中使用 % 运算符,如下所示。
DECLARE @OutputFilePath nvarchar(max);
SET @OutputFilePath = '\\shared data\Everyone Share\';
DECLARE @ExportSQL nvarchar(max);
SET @ExportSQL = N'
EXEC master.dbo.xp_cmdshell
''bcp "SELECT FileID, NAME FROM [Process].[dbo].[Vendor] WHERE FileName LIKE ''%'' + AAMG + ''%''" queryout "' + @OutputFilePath + '\OutputData.csv" -T -c -t -S WIN-db02''
'
EXEC(@ExportSQL)
但它给我抛出了一个错误,说“%”附近的语法不正确
如果我只是删除 LIKE 部分,整个代码就可以正常工作。
答:
1赞
Squirrel
5/31/2023
#1
(转载自评论,此处更容易阅读)
您需要将单引号加倍%
SET @ExportSQL = N'
EXEC master.dbo.xp_cmdshell
''bcp "SELECT FileID, NAME FROM [Process].[dbo].[Vendor] WHERE FileName LIKE ''''%'''' + AAMG + ''''%''''" queryout "' + @OutputFilePath + '\OutputData.csv" -T -c -t -S WIN-db02''
'
看起来 AAMG 是一个常量字符串,而不是列名。在这种情况下,将动态查询更改为
LIKE ''''%AAMG%''''"
评论
0赞
Anusha
5/31/2023
显示无效的列名“AAMG”
0赞
Squirrel
5/31/2023
这是一个常量字符串还是列名?
0赞
Squirrel
5/31/2023
如果这是一个常量字符串,则无需进行串联,只需使用% + AAMG + %
LIKE '%AAMG%'
0赞
Anusha
5/31/2023
是的,它是一个常量字符串,''''%AAMG%'''''“就像一个魅力
评论
bcp.exe
bcp "SELECT FileID, NAME FROM dbo.Vendor WHERE FileName LIKE '%' + AAMG + '%'" queryout ($OutputFilePath + '\OutputData.csv') -T -c -t -S WIN-db02 -d -d "Process"
LIKE ('%AAMG%')
xp_cmdshell
bcp