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

Sql server 2012 如何使用SSMS中的表值参数执行存储过程,sql-server-2012,ssms,Sql Server 2012,Ssms,在存储过程上单击鼠标右键并选择“执行存储过程命令”时,应将什么作为值传递给表值参数 我不是说SSMS“查询”窗口。我指的是右键单击SP时显示的“执行过程”对话框 我可以通过此屏幕直接向SP提供参数值吗?可以这样做。例如,假设您定义了以下表类型: CREATE TYPE dbo.ContactsList AS TABLE ( ContactID VARCHAR(25) NOT NULL ); GO 您希望执行一个存储过程,该存储过程只从SSMS中获取一个此类参数。为此,请从SSMS中选择“执行存

在存储过程上单击鼠标右键并选择“执行存储过程命令”时,应将什么作为值传递给表值参数

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


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

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

CREATE TYPE dbo.ContactsList AS TABLE ( ContactID VARCHAR(25) NOT NULL ); GO
您希望执行一个存储过程,该存储过程只从SSMS中获取一个此类参数。为此,请从SSMS中选择“执行存储过程”,为参数值提供一个垃圾值,然后单击“确定”。这将生成执行存储过程的样板代码,并给出错误消息

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

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

最后,以
为例执行上述版本。

这是一个老生常谈,但如果有人遇到: 您可以利用execute sp对话框为表值参数的值呈现带
null
的执行脚本,并为所有其他参数呈现其值。该脚本将不会第一次运行。然后,您可以为tvp添加声明,并按如下方式分配它:(这适用于名为IDsList的int列表类型)


我怀疑您是否可以从设计器中传递表值参数。为什么不使用SQL脚本来执行这个过程呢?我只是在寻找一种更快的方法,这个命令生成要执行的脚本,因此,如果所有内容都是自动生成的,那就太好了。对于这些事情,我建议您使用RegGate.com上的SQL Promt之类的工具。当您编写exec PROCNAME时,此工具将生成完整的脚本。在我的第二句话中,我特别指出:“我不是在谈论SSMS”查询“窗口”,这就是您建议的操作。我在问是否可以在对话框窗口中直接提供TVP。
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