我正在尝试创建一个存储过程,它将检查表中的列表名称以及相应的(布尔/位)值,即使其中一个记录的值为true,存储过程应返回True,否则返回返回false。
这是表格,
Table Name - FruitCrate
Column A (VarChar (Max)) - FruitName
Column B (bit) - Eatable
现在我想要一个存储过程,我可以提供一个List FruitNames,它会检查它们中是否有任何可食用,然后返回true,否则为false。
不确定如何从未将列表作为参数发送到存储过程。
修改
这是我正在尝试但却出现语法错误,
Create PROCEDURE [dbo].[ProcedureName]
(
@FruitNames varchar(max)
)
AS
Select * From
(SELECT * FROM FruitCrate WHERE FruitName IN (' +@FruitNames+ '))
WHERE FruitCrate.Eatable= 1
错误 **
...')'附近的语法不正确....关键字附近的语法不正确 'WHERE'。
**
答案 0 :(得分:1)
您可以参考此question,它使用以逗号分隔的ID列表。
您的存储过程中将实现相同的实现
答案 1 :(得分:1)
第1步:您可以将逗号分隔的(或任何其他分隔符,不在任何水果名称中,ex '!'
或'|'
)字符串< / p>
第2步:您需要使用表值T-Sql函数来拆分分隔字符串(Such as this)(例如,表列名称为myColumn
)
CREATE FUNCTION Split (@String nvarchar(4000), @Delimiter char(1))
RETURNS @Results TABLE (myColumn nvarchar(500))
AS
BEGIN
--Function body
RETURN @Results
END
第3步:编写一个存储过程,将splitted fruitenames与表进行比较。
CREATE PROCEDURE CheckEatables
@fruitName nVarchar(4000) --Change the length as required
AS
BEGIN
SELECT FruitName, COALESCE(Eatable,0) Eatable
FROM FruitCrate fc JOIN dbo.Split(@fruitNames,',') fn
ON fc.FruitName = fn.myColumn
END