存储过程调用 xp_cmdshell 作为内联过程
Stored procedure calling xp_cmdshell as inline procedure
我希望在调用 dbo.generate_CSV 过程时,在提供所有参数后,执行另一个包含 xp_cmdshell 的内联存储过程。
关于bcp export我想除了用xp_cmdshell.
没有别的办法了
基本上用户只需调用 generate_CSV 过程即可获得所需的输出。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF EXISTS ( select * from sysobjects where name ='dbo.generate_CSV ' )
DROP procedure dbo.generate_CSV
GO
CREATE procedure dbo.generate_CSV
(
@dbName varchar(100),
@tblName varchar(100),
@outputPath varchar(100)
)
AS
GO
DECLARE @sql varchar(8000)
SELECT @sql = 'bcp "select * from @dbName..@tblName"' + ' queryout
@outputPath -c -t"; " -r"\n" -T -S localhost' --+ @@servername
--EXEC master..xp_cmdshell @sql
GO
Users only concern is executing this procedure.
EXEC dbo.generate_CSV @dbName = '[dbName]', @tblName =
'[tblName]',@outputPath = '[outputPath]'
所以我的问题是如何在 dbo.generate_CSV 过程中调用 exec xp_cmdshell 以便在执行 generate_CSV 时调用 bcp 复制,我们得到我们的CSV 文件。
编辑 1:
当我删除评论并执行此操作时,我收到以下错误...
SQLState = 37000, NativeError = 137 Error = [Microsoft][SQL Native
Client][SQL Server]Must declare the scalar variable "@dbName".
SQLState = 37000, NativeError = 8180 Error = [Microsoft][SQL Native
Client][SQL Server]Statement(s) could not be prepared. NULL
您应该这样连接 tblName:
SELECT @sql = 'bcp "select * from ' + @dbName+ '..' + @tblName + '"' + ' queryout
@outputPath -c -t"; " -r"\n" -T -S localhost' --+ @@servername
我希望在调用 dbo.generate_CSV 过程时,在提供所有参数后,执行另一个包含 xp_cmdshell 的内联存储过程。
关于bcp export我想除了用xp_cmdshell.
没有别的办法了基本上用户只需调用 generate_CSV 过程即可获得所需的输出。
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF EXISTS ( select * from sysobjects where name ='dbo.generate_CSV ' )
DROP procedure dbo.generate_CSV
GO
CREATE procedure dbo.generate_CSV
(
@dbName varchar(100),
@tblName varchar(100),
@outputPath varchar(100)
)
AS
GO
DECLARE @sql varchar(8000)
SELECT @sql = 'bcp "select * from @dbName..@tblName"' + ' queryout
@outputPath -c -t"; " -r"\n" -T -S localhost' --+ @@servername
--EXEC master..xp_cmdshell @sql
GO
Users only concern is executing this procedure.
EXEC dbo.generate_CSV @dbName = '[dbName]', @tblName =
'[tblName]',@outputPath = '[outputPath]'
所以我的问题是如何在 dbo.generate_CSV 过程中调用 exec xp_cmdshell 以便在执行 generate_CSV 时调用 bcp 复制,我们得到我们的CSV 文件。
编辑 1: 当我删除评论并执行此操作时,我收到以下错误...
SQLState = 37000, NativeError = 137 Error = [Microsoft][SQL Native Client][SQL Server]Must declare the scalar variable "@dbName". SQLState = 37000, NativeError = 8180 Error = [Microsoft][SQL Native Client][SQL Server]Statement(s) could not be prepared. NULL
您应该这样连接 tblName:
SELECT @sql = 'bcp "select * from ' + @dbName+ '..' + @tblName + '"' + ' queryout
@outputPath -c -t"; " -r"\n" -T -S localhost' --+ @@servername