Как создавать сценарии ALTER вместо сценариев CREATE с помощью SMO (объект управления сервером)

Я использую Microsoft.SqlServer.Management.Smo для написания сценариев SQL для хранимых процедур, таблиц, представлений и т. д. Я делаю это для того, чтобы поместить их в систему управления версиями.

Как я могу получить для них сценарии ALTER вместо сценариев CREATE для хранимых процедур? Есть ли параметр/параметр в ScriptingOptions' свойства?


person hIpPy    schedule 01.07.2010    source источник
comment
В качестве обходного пути, как только сценарии созданы, я читаю их, меняю CREATE на ALTER и записываю их обратно.   -  person hIpPy    schedule 07.07.2010


Ответы (5)


  1. Используйте обычные параметры сценариев и инструменты для SMO c#.
  2. тогда просто используйте.

    foreach (string line in script)
                {
                    string l = line.Replace("CREATE FUNCTION", "ALTER FUNCTION");
                }
    
  3. Ta Da. :).

person Grim    schedule 22.07.2011

Класс StoredProcedure имеет метод, который создает операторы ALTER.

https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.storedprocedure.scriptheader(v=sql.120).aspx

использование

var sprocHeader = sproc.ScriptHeader(forAlter: true);
var sprocBody = sproc.TextBody;
person Steven Liekens    schedule 03.09.2015
comment
На самом деле это ключевой момент для SP, создающего сценарий изменения. Спасибо ! - person jyao; 14.12.2019

Похоже, что для сценариев ALTER нет настроек. Свойство со значением ScriptingOptions.ScriptDrops как true создает операторы удаления. Недостатком этого является то, что разрешения должны быть переназначены.

Закрытие этого вопроса.

person hIpPy    schedule 09.07.2010
comment
Я согласен - я пробовал это раньше и так и не нашел способ написания сценария для изменения. В итоге я использовал ScriptingOptions (msdn .microsoft.com/en-us/library/), чтобы указать проверку на существование и удаление в случае обнаружения. - person Bobby B; 13.07.2010

Взгляните на DBSourceTools.

Это инструмент с графическим интерфейсом для записи всех объектов в базе данных SQL на диск, специально для управления исходным кодом баз данных. Серверная часть использует SMO.

person blorkfish    schedule 26.07.2010

Я использую это для сравнения серверов. toSP — это текст SP. Если на сервере «TO» его нет, я делаю Create(), в противном случае это Alter() для загруженного StoredProcedure spT.

If toSP = "" Then  ' Empty
    spT.Create()
Else
    spT.Alter()
End If
person SteveO    schedule 01.06.2011