提取名称

时间:2011-10-20 20:18:42

标签: sql-server sql-server-2005 tsql sql-server-2008

我有一个字符串,其中包含数据库名称,Schema名称和Procdedure名称

'manged.dbo.gen_scri'

我正在尝试从中提取数据库名称,Schema名称和Procdedure名称,所以我写了一个这样的查询:

DECLARE @Name VARCHAR(1000)= 'manged.dbo.gen_scri',
@DB VARCHAR(100),
@Schema VARCHAR(100),
@Proc_Name VARCHAR(max)

SELECT @DB=SUBSTRING(@Name,1,CHARINDEX('.',@Name)-1)

SELECT @Schema=SUBSTRING(@Name,(CHARINDEX('.',@Name))+1,CHARINDEX('.',@Name,(LEN(@DB))+2)-((CHARINDEX('.',@Name))+1))

SELECT @Proc_Name=SUBSTRING(@Name,LEN(@DB)+LEN(@Schema)+3,100)

SELECT  @DB AS Database_Name,@Schema AS SchemaName,@Proc_Name AS Proc_Name

有更好的方法吗?

1 个答案:

答案 0 :(得分:4)

答案是PARSENAME(full_object_name, part) function,其中part可以是:1 =>对象名称,2 => schema,3 =>数据库名称,4 =>服务器名称:

SELECT   @Proc_Name = PARSENAME(@Name, 1)       
        ,@Schema    = PARSENAME(@Name, 2)       
        ,@DB        = PARSENAME(@Name, 3);