Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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
Sql server SQL将存储过程的结果选择到注释中_Sql Server_Stored Procedures_Sql Server 2012 - Fatal编程技术网

Sql server SQL将存储过程的结果选择到注释中

Sql server SQL将存储过程的结果选择到注释中,sql-server,stored-procedures,sql-server-2012,Sql Server,Stored Procedures,Sql Server 2012,我将从存储过程(多列)返回一个结果集。我能够从函数(getContactDisplayName)填充列的值,例如: 我想对存储过程做完全相同的事情(sp_GetFormAnswer),例如: 这可能吗?若然,原因为何?我的选择是什么?我必须使用存储过程,因为该存储过程调用动态SQL(它使用exec,而函数不能这样做) 注意-代码经过测试,从函数中填充列可以正常工作,存储过程本身也是如此。只是不在选择框内 编辑:我的实际、完整、工作的存储过程(抱歉,它不在测试数据库中): 简而言之,我的最终目标是

我将从存储过程(多列)返回一个结果集。我能够从函数(
getContactDisplayName
)填充列的值,例如:

我想对存储过程做完全相同的事情(
sp_GetFormAnswer
),例如:

这可能吗?若然,原因为何?我的选择是什么?我必须使用存储过程,因为该存储过程调用动态SQL(它使用
exec
,而函数不能这样做)

注意-代码经过测试,从函数中填充列可以正常工作,存储过程本身也是如此。只是不在选择框内

编辑:我的实际、完整、工作的存储过程(抱歉,它不在测试数据库中):

简而言之,我的最终目标是使用动态SQL填充字段。我必须使用动态SQL,因为我要从任意数量的表中进行选择。businessreq是使用createsreport写入数据库中的任何表(如果它们有权限的话)(这是一个单独的主题)


注意:我希望将不同的数据从每一行传递到存储过程中,并为每一行提供不同的输出。

更改返回的结果集,而不是创建临时表(如某些注释所述)

EXEC usp_Get_TwoColumnsData
WITH RESULT SETS
(
    (
       NewReturnedColumnName1 VARCHAR(1337) NOT NULL,
       NewReturnedColumnName2 VARCHAR(1337) NOT NULL
    )
)

更改返回的结果集,而不是创建临时表(如一些注释所述)

EXEC usp_Get_TwoColumnsData
WITH RESULT SETS
(
    (
       NewReturnedColumnName1 VARCHAR(1337) NOT NULL,
       NewReturnedColumnName2 VARCHAR(1337) NOT NULL
    )
)

我将假定您发布的动态sql是有效的(请参阅我在OP上的评论)。如果您使用的是2012年之前的版本,则可以使用表变量或临时表执行此操作。下面是如何使用表变量实现这一点

declare @Result table
(
    Result varchar(max) --or whatever datatype makes sense here
)

insert @Result
EXEC crds_sp_GetFormAnswer @FieldName = 'Submission_Data', @TableName = 'cr_Submissions', 
                           @PrimaryKeyColumnName = 'Submission_ID', @DataRecordId = 15;

我将假定您发布的动态sql是有效的(请参阅我在OP上的评论)。如果您使用的是2012年之前的版本,则可以使用表变量或临时表执行此操作。下面是如何使用表变量实现这一点

declare @Result table
(
    Result varchar(max) --or whatever datatype makes sense here
)

insert @Result
EXEC crds_sp_GetFormAnswer @FieldName = 'Submission_Data', @TableName = 'cr_Submissions', 
                           @PrimaryKeyColumnName = 'Submission_ID', @DataRecordId = 15;


您必须从存储过程中创建临时表或变量。但您需要在此处共享一些代码,才能获得类似于真实答案的任何内容。@SeanLange Done。您的动态sql将无法工作。不能在动态sql中参数化对象。也许对于你的问题,这是一个大大简化的版本?@SeanLange我刚刚验证了它的有效性。见截图。不知何故,我的评论甚至对我来说都听起来很时髦——我不是那个意思,谢谢你们的帮助。我当然不会这样读……我的评论也不是那个意思。:)您必须从存储过程中创建临时表或变量。但您需要在此处共享一些代码,才能获得类似于真实答案的任何内容。@SeanLange Done。您的动态sql将无法工作。不能在动态sql中参数化对象。也许对于你的问题,这是一个大大简化的版本?@SeanLange我刚刚验证了它的有效性。见截图。不知何故,我的评论甚至对我来说都听起来很时髦——我不是那个意思,谢谢你们的帮助。我当然不会这样读……我的评论也不是那个意思。:)我正在尝试为每一行运行此程序,并为每一行将参数传递给SP,此解决方案是否有效?如果存储过程有效并给出输出,则可以通过更改结果集来更改它返回的内容。@VSO注意:如果Sean的尝试无效,则此解决方案也将无效,因为它是同一枚硬币的两面。谢谢你的帮助!我正在尝试为每一行运行此程序,并为每一行将参数传递给SP,此解决方案是否有效?如果存储过程有效并给出输出,则可以通过更改结果集来更改它返回的内容。@VSO注意:如果Sean的尝试无效,则此解决方案也将无效,因为它是同一枚硬币的两面。谢谢你的帮助!肖恩,我在2012年,这对我不起作用还是值得一试?它仍然会起作用。在某种程度上指的是另一个答案,使用的是一种完全不同的方法,直到2012年才可用。Sean,我的错,我应该澄清一下,但我填写的字符串常量/整数对于select语句中的每一行都是唯一的。我不太确定这是否有效。哎哟……那你就被卡住了。在select语句中,不能像您需要做的那样为每一行调用一个过程。显而易见的下一个问题是,为什么设计必须在这里使用动态sql?使用不同的表来存储本质上相同的数据是一个很大的危险信号,表明存在问题。肖恩,我在2012年,这对我来说不管用还是值得一试?它仍然管用。在某种程度上指的是另一个答案,使用的是一种完全不同的方法,直到2012年才可用。Sean,我的错,我应该澄清一下,但我填写的字符串常量/整数对于select语句中的每一行都是唯一的。我不太确定这是否有效。哎哟……那你就被卡住了。在select语句中,不能像您需要做的那样为每一行调用一个过程。显而易见的下一个问题是,为什么设计必须在这里使用动态sql?使用不同的表来存储本质上相同的数据是一个很大的危险信号,表明出了问题。
declare @Result table
(
    Result varchar(max) --or whatever datatype makes sense here
)

insert @Result
EXEC crds_sp_GetFormAnswer @FieldName = 'Submission_Data', @TableName = 'cr_Submissions', 
                           @PrimaryKeyColumnName = 'Submission_ID', @DataRecordId = 15;