1

我为我的 .NET 项目创建了一个存储过程,它是这样的,

ALTER PROCEDURE [dbo].[Search_PM_SELECTED]
(
    @acID varchar(50),
    @pmCat varchar(50),
    @pmTitle varchar(50),
    @pmUsername varchar(50),
    @pmSiteURL varchar(100)
)
AS
    SELECT * FROM pmPassword
    WHERE acID  = @acID and
    pmCat like '%' + @pmCat + '%' or
    pmTitle like '%' + @pmTitle + '%' or
    pmUsername like '%' + @pmUsername + '%' or
    pmSiteURL like '%' + @pmSiteURL + '%';

我要完成的是选择与这些字段匹配的所有记录,但它们必须在acID内。为了进一步解释,请看下面;

 acID    pmCat      pmTitle    pmUsername       pmSiteURL  
 1      Windows     Google       MyName     www.somewhere.com     
 2      Network     FTP          MyName     www.somewhere.com  

上面应该看起来像一张桌子。我只想显示acID = 1

的项目 请注意,每当我添加一条记录时,acID会自动递增,这是我仅在 VB 中完成的。acID 不是 PK。我的 PK 是pmID,它没有包含在查询中,因为我没有用它。

我正在使用VBSQL LocalDB (2012)。

4

1 回答 1

3

AND的优先级高于OR。您需要添加括号以获得所需的内容:

SELECT *
FROM pmPassword
WHERE acID = @acID
AND
(
    pmCat LIKE '%' + @pmCat + '%' 
    OR pmTitle LIKE '%' + @pmTitle + '%'
    OR pmUsername LIKE '%' + @pmUsername + '%'
    OR pmSiteURL LIKE '%' + @pmSiteURL + '%'
);

您的查询解释如下:

SELECT *
FROM pmPassword
WHERE (acID = @acID AND pmCat LIKE '%' + @pmCat + '%')
OR pmTitle LIKE '%' + @pmTitle + '%'
OR pmUsername LIKE '%' + @pmUsername + '%'
OR pmSiteURL LIKE '%' + @pmSiteURL + '%'
于 2012-08-09T18:45:54.810 回答