用于使用字符串语句的SQL数据类型

用于使用字符串语句的SQL数据类型,sql,sql-server,sqldatatypes,Sql,Sql Server,Sqldatatypes,我想创建一个SQL Server存储过程,如下所示: CREATE PROCEDURE dbo.uspGetCharacterID (@characterName vchar(1000)) as SELECT c.charatcer_full FROM CHARACTER c (nolock) WHERE character_full IN (@characterNam

我想创建一个SQL Server存储过程,如下所示:

CREATE PROCEDURE dbo.uspGetCharacterID                             
   (@characterName vchar(1000)) 
as            
   SELECT c.charatcer_full    
   FROM CHARACTER c (nolock)      
   WHERE character_full IN (@characterName)      
   ORDER BY C.characterID
从代码中,
@charactername
我正在传递-->
最新电影中的蝙蝠侠”,“最新电影中的超人”

但在代码中,它返回零行

注意:如果在SQL中使用这些字符串运行相同的select查询,它将成功返回两行

问题:应使用哪种数据类型才能满足要求

'Varchar'
'Text'
不起作用

请引导


谢谢

此字符串是否表示最新电影中的蝙蝠侠、最新电影中的超人单记录中的数据?选项卡“角色”、“最新电影中的蝙蝠侠”有一行,“最新电影中的超人”有一行。所以运行上面的查询会返回两行,这不是数据类型的问题,关键是,你不能按照你现在的方式来做。不能将字符串列表作为
varchar
传递,然后在
中使用这些字符串。。在(…)
构造中。不是那样的。查看解决此问题的方法,并查看
KM提供的答案。
-这就是解决方法it@marc_s--那么如何使用存储过程在'in'子句中传递多个字符串呢?为什么上面提到的Select查询在使用这些字符串列表手动运行时会成功运行?@Kings.-这里提供的答案向您展示了如何做到这一点!
CREATE TYPE tp_names AS
        TABLE
        (
        name VARCHAR(1000) NOT NULL
        )

GO

CREATE PROCEDURE
        uspGetCharacterID (@names tp_names READONLY)
AS
        SELECT  c.character_full    
        FROM    CHARACTER c
        WHERE   character_full IN
                (
                SELECT  name
                FROM    @names
                )
        ORDER BY
                characterID

GO

DECLARE @names tp_names

INSERT
INTO    @names
VALUES
        ('Batman in latest movies'),
        ('Superman in latest movies')

EXEC    uspGetCharacterID
                @names = @names