操作数类型冲突:我的第一个带有整数列表的用户定义类型,如何通过 SSMS 进行测试

Pet*_*ock 6 sql-server-2008 user-defined-type

我在这里找到了这个美妙的代码

    CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);

    GO 
    CREATE PROCEDURE [dbo].[sp_UseStringList]
        @list StringList READONLY
    AS
    BEGIN
        -- Just return the items we passed in
        SELECT l.Item FROM @list l;
    END

    GO
Run Code Online (Sandbox Code Playgroud)

但我不知道如何通过 SSMS 进行测试

declare @list   StringList  = '1,2,3,4,5'
exec sp_UseStringList @list
Run Code Online (Sandbox Code Playgroud)

给出错误:

Operand type clash: varchar is incompatible with StringList
Run Code Online (Sandbox Code Playgroud)

我该如何测试列表“1,2,3,4,5”

Mar*_*son 7

由于您已声明dbo.StringList为用户定义的类型,因此您必须像使用表一样使用它。

因此'1,2,3,4,5',您必须INSERT将此值放入表中,而不是将其分配为字符串。

BOL 中有一个相当不错的例子,但我会根据你上面的例子创建一个。

CREATE TYPE [dbo].[StringList] AS TABLE(
  [Item] [NVARCHAR](MAX) NULL
);

GO 
CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- Just return the items we passed in
    SELECT l.Item FROM @list l;
END

GO


DECLARE @StringList StringList

INSERT Into @StringList values('1,2,3,4,5') 

EXEC sp_UseStringList @StringList
Run Code Online (Sandbox Code Playgroud)