2017-08-03 9 views
1

私たちはデータベースのProjectIDフィールドを構造化する方法を更新しています。現在、特定のプロジェクトを識別するPD80400などの値があります。TSQL LIKEの一重引用符とワイルドカードをエスケープ

への参照が含まれています、私はどんな手続き/ビュー/テーブル/機能/などのために私達のデータベースを検索する必要があり、このようなProjectID NOT LIKE 'PD%'

としてWhere句にPDXXXXX形式を使用するストアドプロシージャは可能性があります。 PD% 現在、次のスクリプトを使用していますが、%PD%を検索せずにWhere ProjectID NOT LIKE 'PD%'を含むテスト手順を取り込むのに問題があります。Update, Updated, etcのような望ましくない結果が多すぎます。

マイスクリプト:私はすべての余分な結果なしで、上記のよう

SELECT DISTINCT a.[name], b.[text], CASE WHEN a.type IN ('FN', 'TF') THEN 'Function' WHEN a.type = 'P' THEN 'Stored Procedure' WHEN a.type = 'V' THEN 'View' ELSE 'Unknown' END AS 'ObjectType', a.type 
FROM sysobjects a 
INNER JOIN syscomments b on a.id = b.id 
WHERE b.[text] LIKE '%PD%' AND a.name = 'AAAAAAAAAAAAA_TBG_MM_TestProcedure_PDSearch'--AND b.[text] NOT LIKE 'update%' AND b.[text] NOT LIKE 'EmpD%' AND b.[text] NOT LIKE 'updated' AND a.name NOT LIKE 'Z_OLD%' AND a.name NOT LIKE 'ZOLD%' 
ORDER BY ObjectType 

どのように私は例を捕捉するために、私のLIKE文をフォーマットする必要がありますか?

答えて

1

あなたはescape文字を指定することにより、%ワイルドカードをエスケープすることができ、そしてそのような2つの単一引用符単一引用符の使用を含めること:

select 
    a.[name] 
    , b.[text] 
    , case when a.type in ('fn', 'tf') then 'Function' 
     when a.type = 'P' then 'Stored Procedure' 
     when a.type = 'V' then 'View' 
     else 'Unknown' end as 'ObjectType', a.type 
from sysobjects a 
    inner join syscomments b on a.id = b.id 
where b.[text] like '%''PD\%%' escape '\' 
order by ObjectType 

は、2つのダミー手順をテストするには

create procedure dbo.pd_search as 
select * from master..spt_values 
where number = 1 
    and name not like 'PD%' 
go 
create procedure dbo.pd_search_other as 
select * from master..spt_values 
where number = 1 
    and name <> 'PD' 
go 

rextesterデモ:http://rextester.com/KPC17170

リターン:

+-----------+------------------------------------+------------------+------+ 
| name |    text    | ObjectType | type | 
+-----------+------------------------------------+------------------+------+ 
| pd_search | create procedure dbo.pd_search as | Stored Procedure | P | 
|   | select * from master..spt_values |     |  | 
|   | where number = 1     |     |  | 
|   | and name not like 'PD%'   |     |  | 
+-----------+------------------------------------+------------------+------+ 
+0

素晴らしいです!どうもありがとう、それは私が望んでいたよりもうまくいった – gruff

+0

@gruff助けて嬉しいです! – SqlZim

関連する問題