Переменные SQL; объявление, когда параметр отсутствует - PullRequest
1 голос
/ 03 ноября 2010

Я пишу сценарий sql и хотел бы использовать Management Studio для разработки запроса и программу на C # для запуска его в производство.

Мой запрос содержит параметры, например;

SELECT * FROM TABLE
WHERE id = @id

Я могу ввести значение для @id в программе на C #, и это прекрасно работает. Однако я также хочу объявить значения по умолчанию для тестирования в Management Studio. Поэтому я действительно хочу написать что-то вроде этого псевдокода;

if not declared @id
  declare @id int
  set @id=43
end if

SELECT * FROM TABLE   
WHERE id = @id

Есть ли способ проверить, было ли уже занято имя переменной?

Ответы [ 2 ]

4 голосов
/ 03 ноября 2010

Вы не можете делать именно то, что вы ищете.Я бы посоветовал:

1) обернуть скрипт как спрок и указать параметры по умолчанию2) включить блок комментария в верхней части скрипта, который затем можно раскомментировать при работе в SSMS:

/*
-- Default variables for testing
DECLARE @Id INTEGER
SET @Id = 43
*/
SELECT * FROM Table WHERE id = @Id
1 голос
/ 03 ноября 2010

Мне удалось добиться некоторого прогресса, выделив переменные по умолчанию в скрипте, например так:

/** DEFAULTS **/

declare @id int
set @id = 43

/** END DEFAULTS **/

Затем выполняется предварительная обработка скрипта в моей программе на C #, вот так;

script = RemoveBlock(script, "DEFAULTS");

И реализовать функцию так;

public static string RemoveBlock(string script, string blockName)
{
    if (script == null) { return null; }

    var startTag = string.Format("/** {0} **/", blockName);
    var endTag = string.Format("/** END {0} **/", blockName);

    var startTagIdx = script.IndexOf(startTag);
    if (startTagIdx == -1) { return script; }

    var endTagIdx = script.IndexOf(endTag, startTagIdx + startTag.Length);
    if (endTagIdx == -1) { return script; }

    var endOfEndTag = endTagIdx + endTag.Length;

    var beforeBlock = script.Substring(0, startTagIdx);
    var afterBlock = script.Substring(endOfEndTag);

    return beforeBlock + afterBlock;
}

Таким образом, программа на C # запускает версию без переменных, но с параметрами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...