向表值参数传递默认值 - SQL Server

19

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

@districtlist NumericList readonly

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

但是,作为要求,我需要向这个表值参数传递默认值。

@districtlist NumericList = 0 readonly

但是上面的代码会抛出语法错误。是否有可能为表值参数传递默认值?有人可以帮我吗?


3
因为这是一张表格,所以你可以定义一个带有默认值的表格实例,或者将@districtlist NumericList = NULL作为参数(将NULL作为“默认”值传递)。无论哪种方法,都可以实现相同的结果。 - marc_s
2
@districtlist NumericList = NULL 对我不起作用。它会抛出“操作数类型冲突:NULL 与 NumericList 不兼容”的错误。 - bmsqldev
2个回答

33

你可以将 TVP 作为默认值传递:

EXEC dbo.Test_TVP @my_table = default

这相当于一个空表。


1
这是将其传递给UDF的唯一方法。 - Oleksandr
дҢүз”Ёdefault SQL Server 15.0.2101.7дәљдғ§з”џдёҺдҢүз”ЁNULLз›ёеђЊзљ„й”™иҮҮдүҰжЃҮпәљж“ҚдҢњж•°з±»еһ‹е†ІзҒЃпәљNULLдёҚе…әе®№... - pasx

21

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

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


2
如果您尝试将其作为“NULL”传递,则会失败。例如,“@my_table = NULL”将给您一个错误,即“NULL”与您的表数据类型不兼容。 - Tom H
我的意思是,在C#代码中,我只需在插入列表中使用null或0,并将该列表传递到SQL代码中。 - bmsqldev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接