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 に答える