存储过程混淆

本文关键字:存储过程 | 更新日期: 2023-09-27 18:30:42

我正在尝试创建一个存储过程,它将检查表中的列表名称以及相应的(布尔/位)值,即使其中一条记录的值为 true,存储过程也应返回 True,如果不是,则返回 false。

这是表格,

Table Name - FruitCrate
Column A (VarChar (Max)) - FruitName
Column B (bit)  -  Eatable

现在我想要一个存储过程,我可以提供一个列表水果名称,它检查它们中的任何一个是否可以食用,然后返回 true 否则为 false。

不知道如何开始,因为从未将列表作为参数发送到存储过程。

编辑

这就是我正在尝试的,但出现语法错误,

Create PROCEDURE [dbo].[ProcedureName]
(
    @FruitNames varchar(max)
)
AS
Select * From    
(SELECT * FROM  FruitCrate WHERE FruitName IN (' +@FruitNames+ '))
WHERE FruitCrate.Eatable= 1

错误**

。")"附近的语法不正确。关键字附近的语法不正确 "哪里"。

**

存储过程混淆

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

发送

步骤2:你需要一个表值T-SQL函数来拆分一个分隔的字符串(比如这个)(比如表列名是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

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

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