Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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
C# 如何在SQL中的存储过程中将参数传递给bcp_C#_Sql Server - Fatal编程技术网

C# 如何在SQL中的存储过程中将参数传递给bcp

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

我必须使用SQL Server 2017中的存储过程从代码C导出数据库二进制格式中的一些文件blob,并将它们保存在运行web应用程序的服务器目录中。我在存储过程中使用BCP命令。尝试在存储过程中插入参数时出现问题

该无参数存储过程运行良好;在这里,我可以提取一个idDoc=20167的文件,并在目录“e\temp\sql2017”中将其命名为“tt1.pdf”

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时失败。我的意思是,在运行存储过程时出错。我现在尝试了以下存储过程: