Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在存储过程中执行批处理脚本?_Sql_Tsql_Sql Server 2008 - Fatal编程技术网

Sql 如何在存储过程中执行批处理脚本?

Sql 如何在存储过程中执行批处理脚本?,sql,tsql,sql-server-2008,Sql,Tsql,Sql Server 2008,我正在通过存储过程进行集成工作。因此,当我遇到错误时,我需要将文件传输到某个位置 我有一个Windows批处理文件,我需要使用存储过程执行该批处理文件,这意味着我需要在该存储过程中使用查询来执行该批处理文件。有什么建议吗?您可以使用,例如xp\u cmdshell“dir**” 可能您必须激活该SP: -- To allow advanced options to be changed. EXEC sp_configure 'show advanced options', 1 GO -- To

我正在通过存储过程进行集成工作。因此,当我遇到错误时,我需要将文件传输到某个位置

我有一个Windows批处理文件,我需要使用存储过程执行该批处理文件,这意味着我需要在该存储过程中使用查询来执行该批处理文件。有什么建议吗?

您可以使用,例如
xp\u cmdshell“dir**”

可能您必须激活该SP:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO
您可以使用,例如
xp\u cmdshell“dir***”

可能您必须激活该SP:

-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO
这:

根据Ocaso的代码,只要启用xp_cmdshell,就可以正常工作。当然,xp_cmdshell是一个可怕的小怪物,只有在用尽所有其他选项后才应该启用它。考虑这个非常吓人的批处理文件,用于生存:

@ECHO OFF
REM Database info
REM User must have xp_cmdshell exec privileges
SET "user=username"
SET "pass=password"
set "servername=192.168.1.100"
set "database=database_name"
IF EXIST thiscmd.sql DEL /F /Q thiscmd.sql

ECHO SET NOCOUNT ON > thiscmd.sql
ECHO create table #result (outputrow varchar(200)) >> thiscmd.sql
ECHO Insert into #result >> thiscmd.sql
ECHO exec master..xp_cmdshell '%~1' >> thiscmd.sql
ECHO declare @thisline varchar(200) >> thiscmd.sql
ECHO declare output_cursor CURSOR FOR  >> thiscmd.sql
ECHO select * from #result >> thiscmd.sql
ECHO OPEN output_cursor >> thiscmd.sql
ECHO FETCH NEXT FROM output_cursor into @thisline >> thiscmd.sql
ECHO WHILE @@FETCH_STATUS = 0 >> thiscmd.sql
ECHO BEGIN >> thiscmd.sql
ECHO    print @thisline >> thiscmd.sql
ECHO    FETCH NEXT FROM output_cursor into @thisline >> thiscmd.sql
ECHO END >> thiscmd.sql
ECHO CLOSE output_cursor >> thiscmd.sql
ECHO DEALLOCATE output_cursor >> thiscmd.sql
ECHO drop table #result >> thiscmd.sql

.\osql -n -U%user% -P%pass% -S%servername% -d%database% -w200  -i thiscmd.sql

IF EXIST thiscmd.sql DEL /F /Q thiscmd.sql
假设提供的用户名和密码具有xp_cmdshell访问权限,该批处理文件本质上会为您提供一个远程命令提示符,以任何拥有SQL服务的用户的身份运行。这意味着,如果有人破坏了一个SQL用户,他们就破坏了整个服务器。我有类似的批处理文件,可以自动执行net命令来来回移动文件,我保证任何值得攻击的攻击者也会这样做

TL;医生:小心使用!xp\u cmdshell是危险的。

这:

根据Ocaso的代码,只要启用xp_cmdshell,就可以正常工作。当然,xp_cmdshell是一个可怕的小怪物,只有在用尽所有其他选项后才应该启用它。考虑这个非常吓人的批处理文件,用于生存:

@ECHO OFF
REM Database info
REM User must have xp_cmdshell exec privileges
SET "user=username"
SET "pass=password"
set "servername=192.168.1.100"
set "database=database_name"
IF EXIST thiscmd.sql DEL /F /Q thiscmd.sql

ECHO SET NOCOUNT ON > thiscmd.sql
ECHO create table #result (outputrow varchar(200)) >> thiscmd.sql
ECHO Insert into #result >> thiscmd.sql
ECHO exec master..xp_cmdshell '%~1' >> thiscmd.sql
ECHO declare @thisline varchar(200) >> thiscmd.sql
ECHO declare output_cursor CURSOR FOR  >> thiscmd.sql
ECHO select * from #result >> thiscmd.sql
ECHO OPEN output_cursor >> thiscmd.sql
ECHO FETCH NEXT FROM output_cursor into @thisline >> thiscmd.sql
ECHO WHILE @@FETCH_STATUS = 0 >> thiscmd.sql
ECHO BEGIN >> thiscmd.sql
ECHO    print @thisline >> thiscmd.sql
ECHO    FETCH NEXT FROM output_cursor into @thisline >> thiscmd.sql
ECHO END >> thiscmd.sql
ECHO CLOSE output_cursor >> thiscmd.sql
ECHO DEALLOCATE output_cursor >> thiscmd.sql
ECHO drop table #result >> thiscmd.sql

.\osql -n -U%user% -P%pass% -S%servername% -d%database% -w200  -i thiscmd.sql

IF EXIST thiscmd.sql DEL /F /Q thiscmd.sql
假设提供的用户名和密码具有xp_cmdshell访问权限,该批处理文件本质上会为您提供一个远程命令提示符,以任何拥有SQL服务的用户的身份运行。这意味着,如果有人破坏了一个SQL用户,他们就破坏了整个服务器。我有类似的批处理文件,可以自动执行net命令来来回移动文件,我保证任何值得攻击的攻击者也会这样做

TL;医生:小心使用!xp\u cmdshell是危险的