C# 表值可选参数

C# 表值可选参数,c#,sql-server,C#,Sql Server,是否可以使用表值参数作为可选参数创建过程 我尝试了以下代码: CREATE PROCEDURE SP @Table testteype = null READONLY AS .... 但我得到了这个错误: Operand type clash: void type is incompatible with test type ps:我将sql server与C#.Net一起使用,基本上,使用默认值“=null”没有意义,这是错误的原因 默认情况下,@Table testteype获取空表

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

我尝试了以下代码:

CREATE PROCEDURE SP
@Table testteype = null READONLY
AS 
....
但我得到了这个错误:

Operand type clash: void type is incompatible with test type 

ps:我将sql server与C#.Net一起使用,基本上,使用默认值“=null”没有意义,这是错误的原因

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

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

参考:关于如何将其与C#ADO.NET结合使用的示例,我建议使用此post-

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


因此,用默认值标记表值参数是没有意义的。删除“=null”,检查表格内容,你就可以开始了。

不确定为什么上面的答案说将默认值设为null是不正确的,但这对我来说是有效的

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

SELECT......
WHERE @Param1 = SOMETHING
AND (@Param2 = SOMETHING OR @Param2 IS NULL)

你试过看我的答案吗?有什么反馈吗?@chuckp16是最好的选择<代码>表值参数始终具有空表的隐式值。因此,您实际上可以在没有任何参数的情况下调用该过程,它将执行,但表将为空。请将Chuck的答案标记为正确。不同的情况。问题是关于表值参数的。它们的处理方式不同于varchar参数。描述代码的作用以及它如何回答问题比仅仅发布代码片段要好得多。为什么几乎比实际代码更重要。
--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