2012-01-08 13 views
0

SQL Server CEではクエリをバッチ処理できないことが判明しました。だから、私はそれらを分割し、それらを個別に実行しようとしているSQLステートメントの大きな文字列を与えられます。問題は、一部のクエリは、例については、単一のラインなど2で区切られていることを私は次のクエリを持っていると言う:コマンドごとにSQL文字列を分割する

CREATE TABLE [Settings] (
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](100) NOT NULL, 
    [Value] [nvarchar](100) NULL 
) 

ALTER TABLE [Settings] ADD 
    CONSTRAINT [PK_Settings] PRIMARY KEY ([Id]) 

INSERT INTO [Settings] ([Name, [Value]) VALUES ('SiteUrl', 'http://localhost') 
INSERT INTO [Settings] ([Name], [Value]) VALUES ('AssetsUrl', '/Assets') 

私は、文字列配列にそれぞれのSQLコマンドを分割したいと思います。ヘルプをよろしくお願いいたします。おかげ

+0

をsepareteするあなたの大きな肉のSQL文字列を分割しましたか? – Oded

+0

クエリが2行で区切られているのはなぜですか? – atoMerz

答えて

2

は、このコードは、SQLコマンドこれらのクエリが定義されてい

string str = @"CREATE TABLE [Settings] (
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Name] [nvarchar](100) NOT NULL, 
    [Value] [nvarchar](100) NULL 
) 

ALTER TABLE [Settings] ADD 
    CONSTRAINT [PK_Settings] PRIMARY KEY ([Id]) 

INSERT INTO [Settings] ([Name, [Value]) VALUES ('SiteUrl', 'http://localhost') 
INSERT INTO [Settings] ([Name], [Value]) VALUES ('AssetsUrl', '/Assets')"; 

// Replace all [new line] to [space] 
while (str.Contains(Environment.NewLine)) 
{ 
    str = str.Replace(Environment.NewLine, " ");   
} 

// Array of all sql commands using in query 
string[] sqlCommands = { "CREATE TABLE", "ALTER TABLE", "INSERT INTO" }; 

// Insert before each sql expression new line 
foreach (string sqlCommand in sqlCommands) 
{ 
    str = str.Replace(sqlCommand, Environment.NewLine + sqlCommand); 
} 

// Split big sql string to separate commands, and remove empty strings 
string[] arr = str.Split(new string[] { Environment.NewLine }, 
      StringSplitOptions.None); 
arr = arr.Where(cmd => !String.IsNullOrEmpty(cmd)).ToArray(); 

// Execute sql commands 
foreach (string command in arr) 
{ 
    Console.WriteLine(">> {0}{1}", command, Environment.NewLine); 
} 
+0

偉大な治療、感謝を働いた。 – nfplee