【问题标题】:How to execute stored procedure with table-valued parameter from SSMS如何使用 SSMS 中的表值参数执行存储过程
【发布时间】:2013-06-21 17:11:48
【问题描述】:

当我右键单击存储过程并选择执行存储过程命令时,我应该将什么作为值传递给表值参数?

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

我可以通过这个屏幕直接向 SP 提供参数值吗?

【问题讨论】:

  • 我怀疑你是否可以从设计师那里传递表值参数。为什么不使用 SQL 脚本来执行程序?
  • 我只是在寻找一种更快的方法,这个命令会生成脚本来执行,所以一切都自动生成就好了。
  • 对于此类事情,我建议您使用 RegGate.com 的 SQL Promt 等工具,该工具将在您编写 exec procName 时生成完整的脚本

标签: sql-server-2012 ssms


【解决方案1】:

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

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

您希望执行一个存储过程,该过程仅从 SSMS 中获取此类型的一个参数。为此,请从 SSMS 中选择 Execute Stored Procedure,为参数值提供 JUNK 值,然后单击 OK。这将生成样板代码来执行存储过程并给你一个错误消息。

接下来,将样板代码修改成这样,用@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> 为例,执行上述版本。

【讨论】:

  • 在我的第二句话中,我特别说:“我不是在谈论 SSMS 的“查询”窗口”,这是您建议做的。我在问是否可以在对话窗口中直接提供 TVP。
【解决方案2】:

这是一个老歌,但如果有人遇到: 您可以利用执行 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    相关资源
    最近更新 更多