Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何验证列??SQL_Sql_Sql Server_Validation - Fatal编程技术网

如何验证列??SQL

如何验证列??SQL,sql,sql-server,validation,Sql,Sql Server,Validation,我有一张有一些数据的表格。其中一列名为Category,包含SKI或SB等数据 我有一个要验证的函数和一个过程。 我只需要得到滑雪类的专栏。我知道还有其他简单的方法来实现这一点…但我有一个任务,这就是为什么我使用函数和过程 我做错了什么 CREATE FUNCTION validateProducts(@productCategory NVARCHAR(50)) RETURNS BIT AS BEGIN DECLARE @returnValue BIT IF(@productCa

我有一张有一些数据的表格。其中一列名为Category,包含SKI或SB等数据

我有一个要验证的函数和一个过程。 我只需要得到滑雪类的专栏。我知道还有其他简单的方法来实现这一点…但我有一个任务,这就是为什么我使用函数和过程

我做错了什么

CREATE FUNCTION validateProducts(@productCategory NVARCHAR(50))
RETURNS BIT AS
BEGIN
    DECLARE @returnValue BIT
    IF(@productCategory LIKE 'SKI')
        SET @returnValue = 1 --valid
    ELSE
        SET @returnValue = 0 --invalid


    RETURN @returnValue
END
GO

CREATE PROCEDURE usp_ProductsRead(@productType NVARCHAR(50)) AS
BEGIN

    DECLARE @productCategory NVARCHAR(50)
    SET @productCategory=@productType
    SELECT Category, Model
    FROM PRODUCTS
    WHERE dbo.validateProducts(@productCategory) = 1
END
GO

EXEC usp_ProductsRead @productType='SKI'

where
子句中再添加一个条件,否则当您通过
@productCategory='SKI'

CREATE PROCEDURE usp_ProductsRead(@productType NVARCHAR(50)) AS
BEGIN
    SELECT Category, Model
    FROM PRODUCTS
    WHERE dbo.validateProducts(@productType) = 1 and Category=@productType
END
GO
或者检查函数返回的值,然后选择
产品

CREATE PROCEDURE usp_ProductsRead(@productType NVARCHAR(50)) AS
BEGIN
if (select dbo.validateProducts(@productType))=1
Begin
        SELECT Category, Model
        FROM PRODUCTS
        WHERE Category=@productType
end
else
Begin
     Print 'Category is not SKI'
End

当然,它返回所有类别,因为
中的条件不在表中的行上。它取决于传入的值。因此,如果该值匹配,则返回所有行。如果值不匹配,则不返回任何行

您需要在表中存储的
目录中运行该函数。我不确定那是哪一列,但这里有一个猜测:

CREATE PROCEDURE usp_ProductsRead AS
BEGIN
    SELECT p.Category, p.Model
    FROM PRODUCTS p
    WHERE dbo.validateProducts(p.Category) = 1
END;

EXEC dbo.usp_ProductsRead;

这看起来像SQL Server语法,所以我要删除MySQL标记。您的代码有什么问题?你有错误吗?没有,我没有错误。它向我显示了所有的数据……不仅仅是“滑雪”类别