29

是否可以使用表值参数作为可选参数来创建过程。

我尝试了以下代码:

CREATE PROCEDURE SP
@Table testteype = null READONLY
AS 
....

但我得到这个错误:

Operand type clash: void type is incompatible with test type 

ps:我在 C#.Net 中使用 sql server

4

4 回答 4

60

表值参数始终具有空表的隐式值。因此,您实际上可以在没有任何参数的情况下调用该过程,它会执行但表将为空。

因此,用默认值标记表值参数并没有什么意义。删除“=null”,检查表格内容,你应该很高兴。

于 2013-09-20T22:03:18.673 回答
6

基本上,具有默认值“= null”是没有意义的,并且是错误的原因。

默认情况下,@Table testteype获取空表的值。因此,您可以删除 = null:

CREATE PROCEDURE SP
@Table testteype  READONLY
AS 
....

参考:有关如何将其与 C# ADO.NET 一起使用的示例,我建议使用这篇文章 -使用 SQL Server 的表值参数

于 2013-01-08T02:04:53.713 回答
0
--exa:
--create TYPE  Table_tt   as table(id int,name  varchar(10))

create table #a  (aid int,price int)
insert into #a (aid  ,price  )
select 1,10
union
select 2,50

create PROCEDURE SP
@Table_tt Table_tt  null READONLY     
AS 
 begin 
 select * into #tem from @Table_tt
 select * from #a where aid in(select id from #tem)  or aid='' 
 end

 exec SP 
于 2021-06-15T12:20:55.597 回答
-1

不知道为什么上面的答案表明默认值 = NULL 是不正确的,但这对我有用。

CREATE PROCEDURE SP
(
    @Param1 VARCHAR(10),
    @Param2 VARCHAR(10)=NULL
)

SELECT......
WHERE @Param1 = SOMETHING
AND (@Param2 = SOMETHING OR @Param2 IS NULL)
于 2017-08-10T17:38:28.433 回答