Разделение строки SQL на команду - PullRequest
0 голосов
/ 08 января 2012

Я только что обнаружил, что SQL Server CE не позволяет вам группировать запросы. Поэтому, учитывая большую строку операторов SQL, я пытаюсь разделить их, а затем выполнить их по отдельности. Проблема в том, что некоторые запросы разделяются одной строкой, а другие 2. Например, скажем, у меня есть следующий запрос:

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 на строковый массив. Ценю помощь. Спасибо

1 Ответ

2 голосов
/ 08 января 2012

Этот код разделяет вашу строку sql большого мяса на отдельные команды 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...