Что делает ключевое слово FOR в этом предложении SQL Server ALTER TABLE?

#sql-server #alter-table

Вопрос:

Я не уверен, что делает FOR в этом фрагменте SQL Server.

 ALTER TABLE [dbo].[TableName] 
    ADD DEFAULT (NEXT VALUE FOR [dbo].[TableName_Seq]) FOR [TableName_Key]
 

Когда я пытаюсь найти в Google пункт «ДЛЯ», единственным значимым результатом, который я получил, было это, но я не думаю, что это имеет отношение к делу

Комментарии:

1. СЛЕДУЮЩЕЕ ЗНАЧЕНИЕ ДЛЯ (Transact-SQL)

2. ИЗМЕНИТЬ ТАБЛИЦУ (Transact-SQL) — Примеры: Добавление столбцов и ограничений — D. Добавление ограничения по УМОЛЧАНИЮ в существующий столбец

3.Их два FOR — какой из них вам непонятен??

4. И то и другое, если честно

Ответ №1:

FOR является ключевым NEXT VALUE FOR словом функции. Он используется для возврата следующего значения из указанного объекта последовательности.

FOR также является ключевым DEFAULT словом предложения constraint, указывающим имя целевого столбца ограничения.

В контексте DDL в вашем вопросе результатом функции является значение по умолчанию, автоматически присваивающее значение, когда значение явно не указано в INSERT инструкциях.

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

Комментарии:

1. Правда — если это то, о чем FOR он спрашивает, — FOR в этом заявлении, однако, есть два ….

2. Хорошая мысль @marc_s, добавил это к моему ответу.

3.Другой способ выразить это так: это просто одно из тех ненужных и двусмысленных (зависящих от контекста) слов, которые любит SQL, например insert INTO fetch NEXT ... ONLY left OUTER join

4. Спасибо тебе @Charlieface.

Ответ №2:

FOR само по себе не имеет конкретного значения, оно зависит от контекста.

В этом случае существует 2 способа использования FOR :

  • NEXT VALUE FOR функция, которая используется для генерации следующего значения из последовательности.
  • ALTER TABLE [table_name] ADD [table_constraint] , где table_constraint имеет форму DEFAULT constant_expression FOR column . Таким образом, он добавляет ограничение по умолчанию для TableName_Key столбца, и значение этого ограничения по умолчанию берется из TableName_Seq последовательности.