存储过程混乱

时间:2013-09-09 09:41:54

标签: c# stored-procedures sql-server-2000

我正在尝试创建一个存储过程,它将检查表中的列表名称以及相应的(布尔/位)值,即使其中一个记录的值为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'。

**

2 个答案:

答案 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