2017-06-13 92 views
1

我要检查是否有一些用户定义的表类型的参数具有值或者是NULL值,但我收到以下错误检查是否UTD参数在存储过程

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 
) 

回答

3

使用

IF EXISTS(SELECT * FROM @Words) 

IF @Words IS NOT NULL 

表值参数将始终存在,不能NULL像一个标量参数。

如果您在不传递任何参数的情况下致电exec [dbo].[SearchByWord],结果是@Words将为空表。

+0

我觉得自己像一个垃圾堆,我完全忘了EXISTS clausule ...谢谢 – NioZero