将默认值传递给Table Valued参数 - SQL Server

时间:2016-03-22 12:15:43

标签: sql sql-server tsql

我在一个存储过程中使用了表值参数。这是我使用的语法:

@districtlist NumericList readonly

NumericList是用户定义的表类型)。

但是,作为一项要求,我需要将默认值传递给此表值参数。

@districtlist NumericList = 0 readonly

但是上面的代码会引发语法错误。是否可以将默认值传递给表值参数?有人可以帮我吗?

2 个答案:

答案 0 :(得分:11)

您可以选择不传递参数,即使没有为其定义默认值。例如:

CREATE TYPE TestTable AS TABLE (my_id INT)
GO

CREATE PROCEDURE dbo.Test_TVP
    @my_table TestTable READONLY,
    @my_int INT
AS
BEGIN
    SELECT * FROM @my_table
END
GO

EXEC dbo.Test_TVP @my_int = 2
GO

DROP PROCEDURE dbo.Test_TVP
DROP TYPE TestTable

在这种情况下,表格将为空。如果您需要一些默认行,那么您必须在存储过程中模拟它,可能是使用临时表,因为表值参数必须是READONLY

答案 1 :(得分:10)

您可以默认传递TVP:

EXEC dbo.Test_TVP @my_table = default

这相当于一个空表。