Hi all, I need your help.
I need passing variable into xp_cmdshell.
This is my code :
DECLARE @cmd VARCHAR (100)
SET @cmd = 'D:\inetpub\wwwroot\myFile\myFile_' + CONVERT (VARCHAR, YEAR(GETDATE()), 23) + '.txt' PRINT @cmd
EXEC master.dbo.sp_configure 'show advanced options',
1 RECONFIGURE EXEC master.dbo.sp_configure 'xp_cmdshell',
1 RECONFIGURE EXEC xp_cmdshell 'bcp "SELECT * FROM mytable WHERE YEAR (myDate) = YEAR (GETDATE());" queryout @cmd -T -c -t;'
But I have error :
Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
How to do resolve this ?
Please can you help me ?
Thank you in advance for any help.
January 22, 2020 at 11:07 am
As long as the bcp command was actually executed, you're fine. You always get that "Configuration option..." informational message when you change a setting with sp_configure.
John
January 22, 2020 at 11:11 am
Thank you fo reply.
But the output file :
'D:\inetpub\wwwroot\myFile\myFile_' + CONVERT (VARCHAR, YEAR(GETDATE()), 23) + '.txt'
it was not generated
SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]Unable to open BCP host data-file
January 22, 2020 at 11:24 am
When you run xp_cmdshell, the command is shelled out to the SQL Server service account. It doesn't run in the context of your own login. Therefore you need to make sure that the service account has access to create files in the D:\inetpub\wwwroot\myFile folder.
John
January 22, 2020 at 11:29 am
I have access on folder because if try this code the output is correctly generated.
EXEC master.dbo.sp_configure 'show advanced options',
1 RECONFIGURE EXEC master.dbo.sp_configure 'xp_cmdshell',
1 RECONFIGURE EXEC xp_cmdshell 'bcp "SELECT * FROM mytable WHERE YEAR (myDate) = YEAR (GETDATE());" queryout "D:\inetpub\wwwroot\myFile\myFile_2020.txt" -T -c -t;'
Oh, I see what's happened. The xp_cmdshell process can't see your @cmd variable, so you need to insert it into your string before you run xp_cmdshell.
SET @cmd = 'bcp "SELECT * FROM mytable WHERE YEAR (myDate) = YEAR (GETDATE());" queryout ' + @cmd + ' -T -c -t;'
John
January 22, 2020 at 11:46 am
thank you!
Viewing 7 posts - 1 through 6 (of 6 total)
You must be logged in to reply to this topic. Login to reply