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

时间:2017-06-13 20:59:28

标签: sql-server stored-procedures user-defined-types

我想检查具有某些用户定义的表类型的参数是否具有值或是否为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

用户定义的表格类型是

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

1 个答案:

答案 0 :(得分:3)

使用

IF EXISTS(SELECT * FROM @Words)

IF @Words IS NOT NULL

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

如果在没有传递任何参数的情况下调用exec [dbo].[SearchByWord],结果是@Words将为空表。