我有一个用户定义的表类型:
CREATE TYPE [dbo].[EntityKeysTable] AS TABLE
(
[EntityKey] [uniqueidentifier] NOT NULL,
PRIMARY KEY CLUSTERED( [EntityKey] ASC) WITH (IGNORE_DUP_KEY = OFF)
)
还有一个使用它的函数...但是该函数正在我们系统中的不同进程中使用,我不想进入并且不必在任何地方处理新参数,所以我只是将其设为可选通过使用默认值...
ALTER FUNCTION [dbo].[fnMyFunctionNameHere]
(@siteId UNIQUEIDENTIFIER,
@entityKeys AS EntityKeysTable READONLY,
@partialDeploy AS BIT = false)
RETURNS TABLE
AS
RETURN (
WITH Overrides AS (
SELECT * ....
我为@partialDeploy
做过,但是不确定如何为@entityKeys
做同样的事。
答案 0 :(得分:0)
对于以前的误导性信息,我感到抱歉。
表值函数不能为null。但是您可以在没有记录的情况下定义它们。因此,您将检查(select count(*) from @entityKeys) = 0
来检查是否有entityKeys。
if (select count(*) from @entityKeys) = 0
--load @entityKeys as your wish
答案 1 :(得分:0)
前段时间,我也搜索了该问题的答案,但一无所获。所以我这样做了:
create PROCEDURE dbo.Test
@table dbo.testType readonly
AS
BEGIN
declare @table2 dbo.testType
if(not exists(select * from @table))
.... do something like
insert into @table2(t1,t2) values ....
else
insert into @table2(t1,t2) select t1,t2 from @table
... do main code using @table2
END
用户定义的表类型是可选的。因此,您可能无法将其传递给功能。