exec master..xp_cmdshell bcp select

时间:2012-08-13 11:05:50

标签: c# sql-server database bcp

下面,我从c#.net windows窗体调用一个存储过程。

存储过程包含以下内容:

 exec master..xp_cmdshell ''bcp "select ''''Column1'''',''''Column2'''',''''Column3'''',''''Column4'''',''''Column4'''',''''Column5'''',''''Column6'''',''''Column7'''',''''Column8''''" queryout "' + @Parent_Folder + @Transformed_Tbl + '.csv" -c -t, -T -Slocalhost'''

    exec master..xp_cmdshell ''bcp Databasename..' + @database table+ ' out "' + @serverfolder+ 'temp_' + @user specified file name + '.csv" -c -t, -T -Slocalhost'''

    exec master..xp_cmdshell ''copy /b "' + @serverfolder+ @user specified file name + '.csv" + "' + @serverfolder+ 'temp_' + @user specified file name + '.csv" "' + @serverfolder + @user specified file name+ '.csv"'''

它运行得很好,

但有时用户想要取消此过程。当用户点击取消按钮时,如何取消此运行的bcp进程。这是我在本地系统中的应用程序,我从另一个sql server系统访问数据库,然后将文件保存在同一个sql server系统中。

请让我对这个问题有所了解。

2 个答案:

答案 0 :(得分:1)

使用“xp_cmdshell”并不安全,因为它允许您执行所有操作系统级别的操作,例如运行外部可执行文件。建议不要使用“xp_cmdshell”。

你应该寻找替换xp_cmdshell -

http://www.mssqltips.com/sqlservertip/2014/replace-xpcmdshell-command-line-use-with-sql-server-agent/

答案 1 :(得分:0)

无法使用T-SQL命令从SQL Server取消

xp_cmdshell。您必须删除“取消”和从您的应用程序导出的功能,因为这不是实际可能的事情。如果要进行可取消导出,则必须使用xp_cmdshell滚动自己的w / o。

有些人可能会建议杀死生成的bcp进程,但这有很多问题(发现正确的进程是最简单的进程)并且毫不客气地杀死进程可能会产生可预测的结果,就像部分完成的损坏的导出文件一样用于上游消费工作流程。