2013-05-14 113 views
0

我有一些輸入作爲從腳本中解析對象名稱的最有效方法是什麼?

CREATE PROCEDURE dbo._ws_CallLogs_DeleteAll 
(
    @UserId uniqueidentifier 
) 
AS 

OR

/*========== Script Analyzed by Sql Eye on 11/30/2012 2:55:12 PM ======= 

    *====================== Total warnings : 0 =================================== */ 






SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_NULLS ON 
GO 
SET ANSI_PADDING ON 
GO 
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_CachedPlan_cached_plan_Job_id]') 
       AND parent_object_id = OBJECT_ID(N'[dbo].[CachedPlan]')) 
ALTER TABLE [dbo].[CachedPlan] DROP CONSTRAINT [FK_CachedPlan_cached_plan_Job_id] 
GO 
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CachedPlan]') AND TYPE IN (N'U')) 
DROP TABLE [dbo].[CachedPlan] 
GO 
CREATE TABLE [dbo].[CachedPlan](
    [cached_plan_id] [int] IDENTITY(1,1) NOT FOR REPLICATION NOT NULL, 
    [cached_plan_Job_id] [int] NOT NULL, 
    [dbId] [int] NOT NULL, 
    [dbname] [varchar](100) NOT NULL, 
    [plan_type] [varchar](50) NOT NULL, 
    [objId] [int] NOT NULL, 
    [objname] [varchar](100) NOT NULL, 
    [sql_batch] [varchar](max) NOT NULL, 

我需要挑選出

PROCEDURE dbo._ws_CallLogs_DeleteAll 

OR

TABLE [dbo].[CachedPlan] 

什麼是應該做的最有效的方法小號Ø?

+0

你嘗試過什麼了嗎?您需要以何種方式提高效率 - 在代碼,性能或磁盤訪問方面......? – 2013-05-14 09:27:58

+1

正則表達式? – 2013-05-14 09:28:31

+0

我想用Microsoft.Data.Schema.ScriptDom.Sql,Microsoft.Data.Schema.ScriptDom api's ...給我點時間 – 2013-05-14 09:32:12

回答

2

使用正則表達式:

Match m = Regex.Match(inputString, @"CREATE\s+(?<obj>.+?)\s*\(", RegexOptions.Singleline); 
string objectName = m.Groups["obj"].Value; 
相關問題