#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)
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
последовательности.