2012-01-24 14 views
1

私はいくつかのデータベースを自分のアプリケーションから作成したSQLサーバーにいくつか持っており、データベース名はGUIDになります。一方、私はGUID形式の名前なしでいくつかの約束を持っています。GUIDを使用してSQLサーバー内のデータベース名をフィルタリングする

しかし、私は自分のアプリケーション(GUID形式)から作成したエンゲージメントをどのようにフィルタリングするのかを知りたいと思います。

誰でもGUID形式の名前でデータベースを取得するクエリを作成できますか。どんな助けもありがとう。

select * from sys.databases where ? 

答えて

3

{で始まり、}で終わる長さは38あります。

select * 
from sys.databases 
where name like '{%}' and 
     len(name) = 38 

それとも

select * 
from sys.databases 
where name like '{________-____-____-____-____________}' 

あなたが本当にそれを安全をしたい場合は、この

select * 
from sys.databases 
where name like '{________-____-____-____-____________}' and 
     patindex('{%[^-0-9A-F]%}', name) = 0 
+0

Like ZZZZZZ-ZZZZ-ZZZZ-ZZZZ-ZZZZZZZZ? 8-)ちょうど冗談。 –

+0

@OlegDok - :)まあ...すべての '_ 'を' [0-9A-F] 'に置き換えることはできますが、おそらくそれを超過しているでしょう。 –

+0

+1私はこのような長いLIKEを書くのは面倒です。カーソルは簡単です8-)カーソルが悪い場合でも。 –

2
select * from sys.databases where LEN(name) = 36 

又は

DECLARE @dbs TABLE (NAME sysname) 

DECLARE c CURSOR for 
SELECT name FROM sys.databases 

DECLARE @name sysname 

OPEN c 

FETCH NEXT FROM c INTO @name 

WHILE @@FETCH_STATUS = 0 
BEGIN 
    BEGIN TRY 
     IF CAST(@name AS UNIQUEIDENTIFIER) <> NEWID() PRINT 'Match' 

     INSERT @dbs values(@name) 

    END TRY 
    begin CATCH 
    END CATCH 
    FETCH NEXT FROM c INTO @name 

END 
CLOSE c DEALLOCATE c 

SELECT * FROM @dbs 
+0

感謝を使用することができ、私は事前に値を持っていません。私はGUID FORMAT(00000000-0000-0000-0000-000000000000)の名前ですべての約束が必要です。 –

+0

更新された回答を参照 –

関連する問題