2017-04-04 149 views
1

我想在我的INSERT命令中使用一个变量。此变量包括从StoredProcedure的结果值:在插入命令中使用变量

declare @File as varbinary(max) 
exec @File=[dbo].[MySp] 

enter image description here

但如果我在INSERT命令中使用@File,另一个的值被写入表

insert into [dbo].[Plots] values ('test', @File) 

enter image description here

我的存储过程:

CREATE PROCEDURE [MySp] 
AS 
BEGIN 

EXEC sp_execute_external_script @language = N'R' 
    , @script = N'_RCODE_' 
    , @input_data_1 = N'_INPUT_QUERY_' 
    ,@output_data_1=N'OutputDataset' 
--- Edit this line to handle the output data frame. 
    WITH RESULT SETS (([plot] VARBINARY(max))); 
END; 
+0

你肯定在你的存储过程中它不是一个'out'参数?如果是这种情况,您的存储过程语法不正确。 – Igor

+0

输出参数的数据类型是什么? –

+0

它是VARBINARY(MAX) – Kaja

回答

2

你使用存储过程是错误的。 在第一个屏幕截图上有一个记录集,但在执行exec @File=[dbo].[MySp]后,您没有变量@File中的记录集。 你有

@return_status

@File

@return_status是存储模块的返回 状态的可选整数变量。必须在批处理, 存储过程或函数中声明该变量,然后才能在EXECUTE 语句中使用该变量。

正确的查询可以是这样的:

declare @File as varbinary(max) 
DECLARE @Table TABLE 
(
    plot VARBINARY(MAX) 
) 

INSERT @Table 
exec [dbo].[MySp] 

SELECT @File = MAX(plot) 
FROM @Table 

insert into [dbo].[Plots] values ('test', @File) 
1

您的EXEC调用正在获取SP的结果代码,在没有显式返回语句的情况下,成功为0。

看到这个答案对如何从SP获取的实际数据的详细信息:https://stackoverflow.com/a/3963991/16777