C# 如何在SQL中的存储过程中将参数传递给bcp
我必须使用SQL Server 2017中的存储过程从代码C导出数据库二进制格式中的一些文件blob,并将它们保存在运行web应用程序的服务器目录中。我在存储过程中使用BCP命令。尝试在存储过程中插入参数时出现问题 该无参数存储过程运行良好;在这里,我可以提取一个idDoc=20167的文件,并在目录“e\temp\sql2017”中将其命名为“tt1.pdf”C# 如何在SQL中的存储过程中将参数传递给bcp,c#,sql-server,C#,Sql Server,我必须使用SQL Server 2017中的存储过程从代码C导出数据库二进制格式中的一些文件blob,并将它们保存在运行web应用程序的服务器目录中。我在存储过程中使用BCP命令。尝试在存储过程中插入参数时出现问题 该无参数存储过程运行良好;在这里,我可以提取一个idDoc=20167的文件,并在目录“e\temp\sql2017”中将其命名为“tt1.pdf” CREATE PROCEDURE [dbo].[spDocumentiBCP_1] AS BEGIN DECLARE @sq
CREATE PROCEDURE [dbo].[spDocumentiBCP_1]
AS
BEGIN
DECLARE @sql VARCHAR(1000)
SET @sql = 'BCP "SELECT binario FROM Database1.dbo.TbDocumentibin
WHERE idDoc=20167"
QUERYOUT e:\temp\sql2017\tt1.pdf -T -f e:\TEMP\sql2017\blob1.fmt -S PCNAME\sql2017 '
EXEC master.dbo.xp_CmdShell @sql
END
我试图在存储过程中插入参数,但出现错误
这是我需要的存储过程的一个示例,但我不知道在这种情况下如何在BCP中使用参数:
CREATE PROCEDURE [dbo].[spDocumentiBCP_1]
(@idDoc INT,
@filename VARCHAR(150))
AS
BEGIN
DECLARE @sql VARCHAR(500)
SET @sql = 'BCP "SELECT binario FROM Database.dbo.TbDocumentibin where idDoc=@idDoc"
QUERYOUT e:\temp\sql2017\@nomefile -T -f
e:\TEMP\sql2017\blob1.fmt -S
PCNAME\sql2017 '
EXEC master.dbo.xp_CmdShell @sql
END
我应该从数据库导出文件blob,并将它们保存在运行具有特定名称的web应用程序的服务器上的选定目录中。现在的问题是用BCP命令使用存储过程中的参数。试试这个
create procedure [dbo].[spDocumentiBCP_1] (
@idDoc int,
@filename varchar(150)
)
AS
BEGIN
Declare @sql varchar(500)
set @sql = 'BCP "SELECT binario FROM Database.dbo.TbDocumentibin
where idDoc=" ' + @idDoc + ' "QUERYOUT e:\temp\sql2017" ' + @filename + ' " -T -f e:\TEMP\sql2017\blob1.fmt -S PCNAME\sql2017" '
EXEC master.dbo.xp_CmdShell @sql
END
请注意,在和之间不应该有空格,我带来空格以使代码更清晰。实际代码应该像“++@idDoc+”对于这个存储过程,我有一个错误:Msg 245,16级,状态1,过程dbo.spDocumentiBCP_5,第13行[批处理开始第2行]将varchar值“BCP SELECT binario FROM Database.dbo.TbDocumentibin where idDoc=”转换为数据类型int时失败。我的意思是,在运行存储过程时出错。我现在尝试了以下存储过程: