1

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

**

4

2 回答 2

1

您可以参考这个问题,它使用逗号分隔的 ID 列表。

您将在存储过程中具有相同的实现

于 2013-09-09T09:46:15.283 回答
1

第 1 步:您可以将您的fruitNames 作为逗号分隔(或任何其他不在任何水果名称中的分隔符,例如'!''|')字符串发送

第 2 步:您需要一个 Table Valued T-Sql 函数来拆分分隔字符串(例如 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 步:编写一个存储过程,将拆分后的水果名称与表格进行比较。

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
于 2013-09-09T10:03:48.547 回答