如何为用户定义的表类型设置函数的默认参数值?

时间:2018-12-05 04:54:23

标签: sql-server

我有一个用户定义的表类型:

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做同样的事。

2 个答案:

答案 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

用户定义的表类型是可选的。因此,您可能无法将其传递给功能。