如何使用SSMS中的表值参数执行存储过程

时间:2013-06-21 17:11:48

标签: sql-server-2012 ssms

当我右键单击存储过程并选择Execute Stored Procedure命令时,我应该将哪些值作为值传递给表值参数?

我不是在谈论SSMS“查询”窗口。我在谈论右键单击SP时显示的“执行过程”对话框。

我可以通过此屏幕直接将参数值提供给SP吗?

2 个答案:

答案 0 :(得分:4)

这可以做到。例如,假设您已定义此表类型:

CREATE TYPE dbo.ContactsList AS TABLE ( ContactID VARCHAR(25) NOT NULL ); GO

您希望执行一个存储过程,该过程只从SSMS中获取此类型的一个参数。为此,请从SSMS中选择“执行存储过程”,为参数值提供JUNK值,然后单击“确定”。这将生成执行存储过程的样板代码并给出错误消息。

接下来,将锅炉板修改为类似的内容,用@ContactIdsTableParameter(使用您自己的变量名称)替换您之前提供的JUNK值:

DECLARE @ContactIdsTableParameter AS dbo.ContactsList

INSERT INTO @ContactIdsTableParameter (ContactID)
    SELECT 1
INSERT INTO @ContactIdsTableParameter (ContactID)
    SELECT 100002787

SELECT * FROM @ContactIdsTableParameter

DECLARE @return_value int

EXEC    @return_value = [dbo].[usp_MGOAssignmentsGet]
        @ContactIdsTable = @ContactIdsTableParameter

SELECT  'Return Value' = @return_value

GO

最后,例如使用<F5>执行上述版本。

答案 1 :(得分:1)

这是个老歌,但如果有人遇到: 您可以利用execute sp对话框为表值参数的值以及所有其他参数及其值的null渲染执行脚本。该脚本将不会首次运行。然后,您可以为tvp添加声明,并将其分配如下:(这是用于名为IDsList的int列表类型的)

DECLARE @return_value int
--this two rows for the tvp
DECLARE @p5 dbo.IDsList
insert into @p5 values(7020), (7026)

EXEC @return_value = [dbo].[stpGetSomting]
    @fromDate = N'2018-01-01',
    @toDate = N'2019-01-01',
    @companies = @p5

SELECT  'Return Value' = @return_value