是否可以使用表值参数作为可选参数创建过程。
我尝试了以下代码:
CREATE PROCEDURE SP
@Table testteype = null READONLY
AS
....
但是我收到了这个错误:
Operand type clash: void type is incompatible with test type
ps:我使用带有C#.Net
的sql server答案 0 :(得分:53)
表值参数始终具有空表的隐式值。所以你实际上可以在没有任何参数的情况下调用该过程,它会执行,但表格将为空。
因此,使用默认值标记表值参数并没有多大意义。删除“= null”,检查表格内容,你应该好好去。
答案 1 :(得分:4)
基本上,使用默认值“= null”没有任何意义,这是错误的原因。
默认情况下,@Table testteype
获取空表的值。因此,您可以删除= null:
CREATE PROCEDURE SP
@Table testteype READONLY
AS
....
参考:有关如何在C#ADO.NET中使用此示例的示例,我建议您使用此帖子 - Using SQL Server’s Table Valued Parameters
答案 2 :(得分: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
答案 3 :(得分:-1)
不确定为什么上面的答案表明默认值= NULL是不正确的,但这对我有用。
CREATE PROCEDURE SP
(
@Param1 VARCHAR(10),
@Param2 VARCHAR(10)=NULL
)
SELECT......
WHERE @Param1 = SOMETHING
AND (@Param2 = SOMETHING OR @Param2 IS NULL)