用于使用字符串语句的SQL数据类型
我想创建一个SQL Server存储过程,如下所示:用于使用字符串语句的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
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