Перестроена таблица и добавлено удостоверение в инструменте обновления, но сценарий не повторяется - PullRequest
0 голосов
/ 17 сентября 2018

Мне было поручено исправить сценарий SQL, который принимает обнуляемый столбец неиндексируемого идентификатора и удостоверяется, что у каждой строки есть идентификатор. Затем он создает дублирующуюся таблицу со столбцом ID и Identity & PK и использует команду SWITCH TO, чтобы переместить данные, прежде чем отбросить старую и переименовать новую. В настоящий момент значения NULL заменяются с помощью приведенного ниже цикла while, но когда таблица уже обновлена, выдается следующая ошибка:

Невозможно обновить столбец идентификаторов «myID»

Мое предположение заключается в том, что он даже не пытается войти в цикл, но SQL Server признал, что есть обновление того, что теперь является полем идентификации, и выбрасывает шипение. Это часть пакета обновлений, поэтому он будет запускаться регулярно, но, очевидно, мы хотим избежать появления этой ошибки.

Как только столбец становится столбцом идентификаторов, нам не нужно менять значения. Может ли ошибка быть подавлена, или есть другие решения, которые я должен рассмотреть?

WHILE EXISTS(SELECT * FROM myTable WHERE myID IS null)
BEGIN
    UPDATE myTable 
    SET myID=(SELECT MAX(myID)+1 FROM myTable) 
    FROM (SELECT TOP 1 * FROM myTable WHERE myID IS NULL) AS n 
    WHERE n.myVarChar = myTable.myVarChar -- This is unique, but we don't use text fields as IDs
END
GO

Спасибо!

1 Ответ

0 голосов
/ 17 сентября 2018

Вы должны добавить чек:

IF columnproperty(object_id('mytable'),'myId','IsIdentity') = 0
BEGIN
  WHILE EXISTS(SELECT * FROM myTable WHERE myID IS null)
  BEGIN
    UPDATE myTable 
    SET myID=(SELECT MAX(myID)+1 FROM myTable) 
    FROM (SELECT TOP 1 * FROM myTable WHERE myID IS NULL) AS n 
    WHERE n.myVarChar = myTable.myVarChar;
  END
END

Если столбец myID имеет свойство identity, вы можете пропустить выполнение вашего кода.

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