检查 UTD 参数是否在存储过程中有值

Checking if UTD parameter has values in stored procedure

我想检查具有某些用户定义 Table 类型的参数是否有值或为 NULL,但我收到以下错误

Msg 137, Level 16, State 1, Procedure SearchByWord, Line 63 [Batch Start Line 7]
Must declare the scalar variable "@Words".

存储过程如下(仅相关部分)

CREATE PROCEDURE [dbo].[SearchByWord]
(
    @Words Word_List READONLY
)
AS
BEGIN

    SET NOCOUNT ON;

    -- some DECLARE and SET

    IF @Words IS NOT NULL
    BEGIN
       -- stuff
    END

    -- more stuff
END

用户定义的Table类型是

CREATE TYPE [dbo].[Word_List] AS TABLE(
    [element] [varchar](512) NULL
)

使用

IF EXISTS(SELECT * FROM @Words)

没有

IF @Words IS NOT NULL

table 值参数将始终存在,不能像标量参数那样 NULL

如果您调用 exec [dbo].[SearchByWord] 而没有为参数传递任何内容,结果是 @Words 将为空 table。