2012-01-24 50 views
1

我在我的sql服务器中有几个数据库,其中一些已经从我的应用程序创建并且数据库名称是GUID。另一方面,我有一些没有GUID格式名称的参与。然而,我想知道如何过滤我从我的应用程序(它有GUID格式)创建的约定。使用GUID在SQL Server中过滤数据库名称

任何人都可以创建一个查询来获取名称为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格式(00000000-0000-0000-0000-000000000000)中名称的所有参与。 –

+0

查看最新答案 –

相关问题