我想当一个dbo。提供所有参数后,将调用generate\u CSV过程,以执行另一个包含xp\u cmdshell的内联存储过程。
因为它是关于bcp导出的,所以我认为除了使用xp\u cmdshell之外,没有其他方法。
基本上用户只需调用
生成\u 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
用户唯一关心的是执行此过程。
EXEC dbo.generate_CSV @dbName = '[dbName]', @tblName =
'[tblName]',@outputPath = '[outputPath]'
因此,我的问题是如何在dbo中调用exec xp\u cmdshell。generate\u CSV过程,以便在执行generate\u CSV时,调用bcp copy并获取CSV文件。
编辑1:
当我删除注释并执行此操作时,我收到以下错误。。。
SQLState=37000,NativeError=137错误=[Microsoft][SQL Native
客户端][SQL Server]必须声明标量变量“@dbName”。
SQLState=37000,NativeError=8180错误=[Microsoft][SQL Native
无法准备客户端][SQL Server]语句。无效的