我有一个字符串,其中包含数据库名称,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
有更好的方法吗?
答案 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);