我为我的.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 ,它未包含在查询中,因为我没有使用它。
我正在使用 VB 和 SQL LocalDB (2012)。
答案 0 :(得分: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 + '%'