Разное

Как добавить в таблицу столбец sql: ALTER TABLE ОПЕРАТОР — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Содержание

Добавление нового столбца таблицы в определенную…
[9 ответов]

Ответ: да, это технически возможно, но у вас будет головная боль, и это займет много времени, чтобы выполнить и настроить.

Один: Create/Copy/Drop/Rename

Это фактически то, что делает SQL Server в графическом интерфейсе: вот пример скрипта, который он генерирует и выполняет, когда вы нажимаете кнопку ‘save’ после добавления нового столбца в начало таблицы.

/* To prevent any potential data loss issues, you should review this script in detail before running it outside the context of the database designer.*/
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
GO
CREATE TABLE dbo.Tmp_SomeTable
    (
    MyNewColumn int NOT NULL,
    OriginalIntColumn int NULL,
    OriginalVarcharColumn varchar(100) NULL
    )  ON [PRIMARY]
     TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE dbo.Tmp_SomeTable SET (LOCK_ESCALATION = TABLE)
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable ON
GO
IF EXISTS(SELECT * FROM dbo.SomeTable)
     EXEC('INSERT INTO dbo.Tmp_SomeTable (OriginalIntColumn, OriginalVarcharColumn FROM dbo.SomeTable WITH (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_SomeTable OFF
GO
DROP TABLE dbo.SomeTable
GO
EXECUTE sp_rename N'dbo.Tmp_SomeTable', N'SomeTable', 'OBJECT' 
GO

GO
COMMIT

Два: добавить столбец / UPDATE / удалить столбец / RENAME

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

CREATE TABLE MyTest (a int, b int, d int, e int)

INSERT INTO MyTest (a,b,d,e) VALUES(1,2,4,5)

SELECT * FROM MyTest -- your current table

ALTER TABLE MyTest ADD c int -- add a new column
ALTER TABLE MyTest ADD d_new int -- create copies of the existing columns you want to move
ALTER TABLE MyTest ADD e_new int

UPDATE MyTest SET d_new = d, e_new = e -- transfer data to the new columns

ALTER TABLE MyTest DROP COLUMN d -- remove the originals
ALTER TABLE MyTest DROP COLUMN e

EXEC SP_RENAME 'MyTest.d_new', 'd'; -- rename the new columns
EXEC SP_RENAME 'MyTest.e_new', 'e';

SELECT * FROM MyTest 

DROP TABLE MyTest -- clean up the sample

Третье: жить с этим

Это сильно оскорбляет мое чувство порядка … но иногда это просто не стоит перетасовки.

Добавить столбец со значением по умолчанию в существующую таблицу в SQL Server

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

ALTER TABLE {schemaName}.{tableName}
    ADD {columnName} {datatype} NULL
    CONSTRAINT {constraintName} DEFAULT {DefaultValue}

UPDATE {schemaName}.{tableName}
    SET {columnName} = {DefaultValue}
    WHERE {columName} IS NULL

ALTER TABLE {schemaName}.{tableName}
    ALTER COLUMN {columnName} {datatype} NOT NULL

Для этого нужно добавить столбец как пустое поле со значением по умолчанию, обновить все поля до значения по умолчанию (или вы можете назначить более значимые значения), и, наконец, столбец будет иметь значение NOT NULL.

Причина этого заключается в том, что если вы обновляете крупномасштабную таблицу и добавляете новое ненулевое поле, оно должно записываться в каждую строку и тем самым блокирует всю таблицу по мере добавления столбца, а затем записывает все значения.

Этот метод добавит обнуляемый столбец, который работает намного быстрее сам по себе, а затем заполняет данные перед установкой ненулевого статуса.

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

Кроме того, если у вас есть таблица размером в миллиарды строк, возможно, стоит обновить пакет следующим образом:

WHILE 1=1
BEGIN
    UPDATE TOP (1000000) {schemaName}.{tableName}
        SET {columnName} = {DefaultValue}
        WHERE {columName} IS NULL

    IF @@ROWCOUNT < 1000000
        BREAK;
END

Автор: Ste Bov
Размещён: 05.05.2017 08:45

База Данных MySQL ALTER TABLE Инструкция


Инструкция SQL ALTER TABLE

Инструкция ALTER TABLE используется для добавления, удаления или изменения столбцов в существующей таблице.

Инструкция ALTER TABLE также используется для добавления и удаления различных зависимостей для существующей таблицы.


Изменить таблицу-добавить столбец

Чтобы добавить столбец в таблицу, используйте следующий синтаксис:

ALTER TABLE table_name
ADD column_name datatype;


Изменить таблицу-удалить столбец

Чтобы удалить столбец в таблице, используйте следующий синтаксис (Обратите внимание, что некоторые системы баз данных не позволяют удалить столбец):

ALTER TABLE table_name
DROP COLUMN column_name;


Изменить таблицу-изменить/изменить столбец

Чтобы изменить тип данных столбца в таблице, используйте следующий синтаксис:

Доступ к SQL Server/MS:

ALTER TABLE table_name
ALTER COLUMN column_name datatype;

Мой SQL/Oracle (Предыдущая версия):

ALTER TABLE table_name
MODIFY COLUMN column_name datatype;

Oracle и более поздних версий:

ALTER TABLE table_name
MODIFY column_name datatype;



Пример таблицы SQL ALTER

Посмотрите на таблицу «персоны»:

IDLastNameFirstNameAddressCity
1HansenOlaTimoteivn 10Sandnes
2SvendsonToveBorgvn 23Sandnes
3PettersenKariStorgt 20Stavanger

Теперь мы хотим добавить столбец с именем «DateOfBirth» в таблице «персоны».

Мы используем следующую инструкцию SQL:

ALTER TABLE Persons
ADD DateOfBirth date;

Обратите внимание, что новый столбец «DateOfBirth» имеет тип Date и будет содержать дату. Тип данных определяет тип данных, которые может содержать столбец. Для получения полной информации о всех типах данных, доступных в MS Access, MySQL и SQL Server, перейдите по справка полные типы данных.

Таблица «персоны» теперь будет выглядеть так:

IDLastNameFirstNameAddressCityDateOfBirth
1HansenOlaTimoteivn 10Sandnes 
2SvendsonToveBorgvn 23Sandnes 
3PettersenKariStorgt 20Stavanger 

Пример изменения типа данных

Теперь мы хотим изменить тип данных столбца с именем «DateOfBirth» в таблице «персоны».

Мы используем следующую инструкцию SQL:

ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;

Обратите внимание, что столбец «DateOfBirth» теперь имеет тип year и будет содержать год в двух-или четырех-значном формате.


Пример перетаскивания столбца

Далее, мы хотим удалить столбец с именем «DateOfBirth» в таблице «лица».

Мы используем следующую инструкцию SQL:

Как добавить строку или столбец в таблицу Эксель 2007, 2010, 2013 и 2016

При работе с таблицами Excel часто возникает необходимость добавить строку или столбец уже после того, как часть данных заполнена.

Если вы столкнулись с подобной проблемой, то не стоит переживать. Все решается достаточно просто и в этой статье вы сможете узнать, как это делается. Статья будет актуальна для современных версий Excel, включая Excel 2007, 2010, 2013 и 2016.

Содержание

Как добавить строку в лист Excel

Если вам необходимо добавить строку в лист Excel, то для этого необходимо кликнуть правой кнопкой мышки по номеру той строки над которой необходимо добавить новую строку. После этого в открывшемся меню необходимо выбрать пункт «Вставить». В результате над выбранной вами строкой будет добавлена еще одна пустая строка. При этом нумерация строк сместится вниз.

вставка через контекстное меню строки

Также можно просто кликнуть по любой ячейке в таблице и выбрать пункт «Вставить».

вставка через контекстное меню ячейки

После этого появится небольшое окно, в котором необходимо выбрать вариант «Строка» и нажать на кнопку «Ок». В результате над выделенной ячейкой будет добавлена новая пустая строка.

окно для добавления ячеек

необходимо отметить, что если перед этим вы что-то копировали, то вместо пункта «Вставить» в контекстном меню будет доступен пункт «Вставить скопированные ячейки». Если вам необходимо вставить именно пустую строку, то необходимо сначала отменить предыдущее копирование с помощью нажатия на клавишу ESC на клавиатуре. Также можно воспользоваться кнопкой «Вставить» на вкладке «Главная». Для этого необходимо нажать на стрелку под кнопкой «Вставить» и выбрать пункт «Вставить строки на лист».

вставка с помощью кнопки

С помощью кнопки «Вставить» можно добавить строку в любой момент, не смотря на использование функции копирования.

Как добавить новый столбец в лист Excel

Столбцы добавляются точно также, как и строки. Например, вы можете кликнуть правой кнопкой мышки по номеру столбца и выбрать пункт «Вставить». В этом случае новый пустой столбец будет добавлен перед тем, который вы выбрали.

вставка через контекстное меню столбца

Также можно просто кликнуть правой кнопкой мышки по любой ячейке, выбрать «Вставить», а потом, в открывшемся меню выбрать «Столбец». Либо вы можете нажать на кнопку «Вставить» на вкладке «Главная» и выбрать пункт «Вставить столбцы на лист».

Как добавить строку в таблицу Excel

Внутри листа Excel можно создавать отдельные таблицы, которые помогают управлять данными, сортировать списки и применять фильтры. Если вы хотите добавить строку в конец такой таблицы, то вы можете просто выделять последнюю ячейку в таблице и нажать на клавишу TAB на клавиатуре. В результате нажатия на клавишу TAB в таблицу будет добавлена новая строка, а выделение переместится на первую ячейку последней строки таблицы.

добавление строки с помощью клавиши TAB

Если в конец таблицы необходимо добавить больше одной строки, то вы можете просто расширить таблицу на необходимое количество строк. Для этого необходимо нажать на нижний правый угол таблицы и потянуть его вниз.

расширение таблицы

Если вам необходимо добавить строки внутри таблицы, то это можно сделать так как это описано в первой части статьи. Кликаем правой кнопкой мышки по номеру строки и выбираем «Вставить».

Как добавить столбец в таблицу Excel

Столбцы добавляются в таблицу аналогичным способом. Если необходимо добавить столбец в конец таблицы, то можно просто расшить таблицу на необходимое количество столбцов. Для этого кликаем по нижнему правому краю таблицы и тянем его вправо.

добавление столбца во внутрь таблицы

Если необходимо добавить столбец внутри таблицы, то можно использовать способ, описанный в начале статьи. Кликаем правой кнопкой мышки по столбцу и выбираем «Вставить».

Excel 2007.Изменение размера ячеек, Добавление и удаление столбцов и строк.

Как создать таблицу в базе данных MS SQL Server 2008

В предыдущей статье показано как создавать новую базу данных в MS SQL Server. Информация в базе данных храниться в таблицах, которые являются отображением некоторых логических общностей. В нашей учебной базе, которая будет моделировать работу некой коммерческой фирмы по продаже товаров, как минимум, будут необходимы пять таблиц:
Sotrudniki — в этой таблице будет храниться информация о сотрудниках — Справочник сотрудников фирмы;
Tovary — будет содержать информацию о товарах — Справочник товаров;
Zakazy — сюда будем заносить информацию о сделанных заказах — оперативная таблица о сделанных заказах;
Zakazchiki — будет хранить информацию о заказчиках — Справочник заказчиков;
Postavschiki — хранит информацию о поставщиках товаров — Справочник поставщиков
Приблизительная номенклатура таблиц ясна. Конкретную структуру таблиц с необходимыми полями будем задавать во время их создания. Сейчас аккурат и займёмся этим моментом. Опять запускаем SQL Server Management Studio, выбираем БД, отмечаем ветку Таблицы и по правой кнопке нажимаем по пункту меню «Создать таблицу»:нажимаем создать таблицуДля начала попробуем создать таблицу, в которой будем хранить данные о сотрудниках. Пусть она будет иметь три поля — SotrID (идентификатор сотрудника), FIO (Ф.И.О сотрудника) и Zarplata (Зарплата). Для выполнения этой задачи в колонках Имя столбца и Тип данных заносим соответствующие реквизиты полей таблицы:
Для сохранения введённой информации о структуре таблицы щелкаем правой кнопкой по ярлыку с именем таблицы по умолчанию:
В следующей форме задаём имя таблицы:
После обновления, в «Обозревателе объектов» можно увидеть в списке таблиц только что созданную таблицу:
Первую таблицу в MS SQL Server успешно создали. (пока не обращайте внимание на префикс dbo в имени таблицы. Он означает владельца таблицы — database owner).
Естественно, если мы что-то забыли, всегда можно вставить в структуру таблицы новый столбец. Для этого становимся на нужную таблицу, жмём на правую кнопку мыши и выбираем в контекстном меню «Создать столбец«:
Далее становимся на строке столбца, перед которым желаем вставить новый и по правой кнопке нажимаем по «Вставить столбец«:

Вконтакте

Одноклассники

Мой мир

Facebook

E-mail

Добро пожаловать в TechBrothersIT: как добавить вычисляемый столбец в таблицу

SQL Server

Сценарий:

Вы работаете разработчиком SQL Server в одной из юридических фирм. Вы создали таблицу dbo.Customer, используя определение ниже

 CREATE TABLE Customer (
    CustomerId INT Идентификация (1, 1)
    , Имя VARCHAR (50)
    , Фамилия VARCHAR (50)
    , Возраст SMALLINT
    , PhoneNumber CHAR (9)
    , ДАТА РОЖДЕНИЯ
    , Пол CHAR (1)
    ) 

У вас должно быть полное имя, которое должно состоять из имени и фамилии.Вы не хотите сохранять повторяющиеся данные в таблице, добавляя новый столбец для полного имени. Какие у вас есть варианты?

Также в зависимости от возраста, мы хотели бы добавить новый столбец, вызвать IsSenior и отметить его 1, если выше 65, иначе 0.

Решение:

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

Давайте продолжим и создадим Полное имя вычисляемых столбцов и IsSenior в зависимости от наших критериев.

 CREATE TABLE Клиент (
    CustomerId INT Идентификация (1, 1)
    , Имя VARCHAR (50)
    , Фамилия VARCHAR (50)
    , Возраст SMALLINT
    , PhoneNumber CHAR (9)
    , ДАТА РОЖДЕНИЯ
    , Пол CHAR (1)
    , FullName AS FirstName + '' + LastName
    , IsSenior КАК СЛУЧАЙ
        КОГДА Возраст> 65
            ТО 1
        Иначе 0
        КОНЕЦ
    ) 
Мы объединили имя и фамилию для полного имени и написали регистр для столбца IsSenior Computer.Давайте вставим пару записей. 
 вставить в dbo.Customer (FirstName, LastName, Age)
    Ценности («Аамир», «Шахзад», 66),
    ('Раза', 'М', 44) 

Заметил, что я ничего не вставил для столбцов FullName и IsSenior. Значения для этих столбцов будут вычислены, когда мы выберем данные.

Как добавить вычисляемые столбцы в таблицу SQL Server — T-SQL Tutorial

Если вам нужно добавить вычисляемый столбец к выходу из таблицы, вы можете использовать приведенный ниже синтаксис

Изменить имя схемы таблицы.TableName
Добавить ColumnName AS Logic (например, FistName + » + LastName)

Допустим, если мы хотим добавить компьютерный столбец FullName в таблицу Customer, мы можем использовать приведенный ниже сценарий.

 Alter table dbo.Клиент
    Добавить FullName AS FirstName + '' + LastName 
 
Удалить вычисляемый столбец из таблицы SQL Server:
Синтаксис для удаления вычисляемого или обычного столбца такой же.

Alter Table SchemaName.TableName
drop Column ColumnName

Допустим, мы хотим удалить вычисляемый столбец FullName из dbo.Таблица клиентов. Мы можем использовать сценарий ниже.

 Alter table dbo.Клиент
    падение столбца FullName 

Страница не найдена | Vertica

  • Товар
    • Обзор продукта
    • в помещении
    • В облаках
    • Машинное обучение
    • в Hadoop
    • Безопасность данных
    • Voltage SecureData для Vertica
    • Услуги для успеха
  • Решения
    • Vertica Solutions
    • Связь и сетевая аналитика
    • Аналитика поведения клиентов
    • Модернизация хранилища данных
    • Встроенная аналитика
    • Мониторинг мошенничества и управление рисками
    • Интернет вещей (IoT) Analytics
    • Аналитика временных рядов
  • Партнеры
    • Обзор партнеров
    • OEM-производители
    • Системные интеграторы / реселлеры
    • Технологические партнеры
  • ресурсов
    • Библиотека ресурсов
    • Примеры использования клиентов
    • Интернет-трансляции
    • Блог
    • Демо
    • Документация
      • Документация по продукту
      • База знаний
      • Интеграция технологических партнеров
      • Контрольные списки для поиска и устранения неисправностей
      • Краткое руководство
  • О
    • Информация о Vertica
    • Карьера
    • События
    • Информационные бюллетени
    • Новости
  • Поддержка
    • Загрузки
      • Community Edition
      • Клиентские драйверы
      • Загрузки для клиентов
      • Vertica By the Hour на AWS
    • Документация
      • Документация по продукту
      • База знаний
      • Интеграция технологических партнеров
      • Контрольные списки для поиска и устранения неисправностей
      • Краткое руководство
    • Академия Вертика
    • Форум пользователей
    • Патчи
    • Запросы в службу поддержки
    • Чат поддержки
  • Попробуйте Vertica

  • Посмотреть мою приборную панель
  • Свяжитесь с нами
  • Блог
  • Форум пользователей
  • Академия Вертика

Vertica

  • Посмотреть мою приборную панель
  • Свяжитесь с нами
  • Блог
  • Форум пользователей
  • Академия Вертика

Vertica

  • Товар
    • Обзор продукта

Создание изменения и удаления таблиц на сервере SQL

Вернуться к: Учебное пособие по SQL Server для начинающих и профессионалов

Создание изменения и удаления таблиц на сервере SQL

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

  1. Что такое SQL?
  2. Понимание подязыков SQL
  3. Язык определения данных в SQL Server.
  4. Создать команду в SQL Server
  5. Изменить команду в SQL Server
  6. Команда усечения в SQL Server.
  7. Отбросить команду в SQL Server.
  8. В чем разница между командами удаления и усечения в SQL Server?
Что такое SQL?
  1. Это непроцедурный язык, который используется для связи с любой базой данных, такой как Oracle, SQL Server и т. Д.
  2. Этот язык был разработан немецким ученым г-ном Э. Ф. Коддом в 1968 году.
  3. ANSI (Американский национальный институт стандартов) одобрил эту концепцию, и в 1972 году на рынок был выпущен SQL.
  4. SQL также называют Sequel, это означает Structured English Query Language,
  5. .

  6. Продолжение предоставит возможность общего языкового интерфейса, это означает, что продолжение — это язык, который может взаимодействовать с любыми типами баз данных, такими как SQL Server, Oracle, MySQL, Sybase, BD2 и т. Д.
  7. SQL не чувствителен к регистру, это означает, что все команды SQL не чувствительны к регистру.
  8. Каждая команда SQL должна заканчиваться точкой с запятой (;) (это необязательно для SQL Server)
  9. SQL можно называть NLI (интерфейс естественного языка). Это означает, что все команды SQL почти аналогичны нормальному английскому языку
  10. .

Субъязыки SQL:

SQL содержит следующие подъязыки

  1. DDL (5 команд — create, alter, sp_rename, drop, truncate)
  2. DML (3 команды — Вставить, Обновить, Удалить).
  3. DQL / DRL (1 команда — выбор).
  4. TCL (3 команды — фиксация, откат, точка сохранения)
  5. DCL (2 команды — Grant, Revoke).
Язык определения данных (DDL):
  1. Язык определения данных (DDL) используется для определения объектов базы данных, таких как таблицы, синонимы, представления, процедуры, функции, триггеры и т. Д., Что означает, что операторы DDL используются для изменения / модификации структуры и схемы базы данных или таблиц.
  2. DDL-команды работают со структурой таблицы, а не с данными таблицы.
  3. Этот язык содержит пять команд. Это (CREATE, ALTER, SP_RENAME, TRUNCATE, DROP)

Давайте подробно обсудим каждую из этих команд языка определения данных.

Создать команду в SQL Server:

Команда CREATE используется для создания нового объекта базы данных в базе данных, такого как таблицы, представления, функции и т. Д. В SQL Server все объекты базы данных (таблицы, представления и т. Д.) Сохраняются с расширением « dbo. . <имя объекта> ”.Синтаксис для создания базы данных показан ниже.

Пример : Следующая команда Create создает таблицу с именем Student.

 СОЗДАТЬ ТАБЛИЦУ студент
(
    Studid INT,
    sname VARCHAR (макс.),
    зарплата DECIMAL (6, 2)
)
 
Правила создания таблицы в SQL Server:

При создании базы данных в SQL Server необходимо соблюдать следующие правила.

  1. Имя таблицы должно быть уникальным в базе данных.
  2. Имя столбца должно быть уникальным в пределах определения таблицы.
  3. Имя таблицы не должно начинаться с цифр и специальных символов, кроме символа подчеркивания (-).
  4. Не оставляйте места в имени таблицы. Если вы хотите оставить место в имени таблицы, вы можете использовать символ подчеркивания.
  5. Имя таблицы должно содержать минимум 1 символ и максимум 128 символов.
  6. Таблица должна содержать минимум 1 столбец и максимум 1024 столбца.
Изменить команду в SQL Server:

Эта команда используется для изменения или модификации структуры таблицы. В SQL Server с помощью команды ALTER мы можем выполнять следующие операции с существующей таблицей.

  1. Увеличить / уменьшить ширину столбца.
  2. Изменить тип данных столбца.
  3. Измените NOT NULL на NULL или NULL на NOT NULL.
  4. Используется для добавления нового столбца в существующую таблицу.
  5. Используется для удаления существующего столбца.
  6. Мы можем добавить новое ограничение.
  7. Он может отбросить существующее ограничение на таблицу.
  8. Отключить или повторно включить проверку ограничения таблицы.
  9. Изменение имени столбца в таблице.
Пример:

Чтобы понять использование команды ALTER в SQL Server, давайте сначала создадим следующую таблицу Student.

 СОЗДАТЬ ТАБЛИЦУ Студент
(
    Нет INT,
    Имя VARCHAR (50)
)
 
ALTER-ALTER COLUMN:

Эта команда используется для изменения типа данных со старого типа данных на новый тип данных, а также для изменения размера типа данных столбца.

Синтаксис: ALTER TABLE ALTER COLUMN [NEW SIZE]

Изменить ширину столбца

Давайте посмотрим, как мы можем изменить ширину столбца с помощью команды Alter. В нашей таблице студентов ширина имени столбца — VARCHAR (50). Давайте изменим ширину на VARCHAR (100). Для этого нам нужно использовать команду Alter, как показано ниже.

ALTER TABLE Student ALTER COLUMN Name VARCHAR (100)

Примечание: Когда вы увеличиваете ширину столбца, вы не столкнетесь с какими-либо проблемами, но при уменьшении ширины, если таблица содержит данные, мы не можем уменьшить ширину меньше, чем максимальное количество существующих символов в столбце.

Изменение типа данных существующего столбца.

Если вы хотите изменить тип данных существующего столбца, вы можете использовать команду ALTER. Например, в настоящее время тип данных столбца Name — VARCHAR, и мы требуем изменить тип данных с VARCHAR на NVARCHAR. Для этого вам нужно использовать команду ALTER, как показано ниже.

ALTER TABLE Student ALTER COLUMN Name NVARCHAR (100)

Изменение столбца NULL на NOT NULL.

Если вы хотите изменить столбец NULL на NOT NULL, вы можете использовать команду ALTER. Когда вы создаете столбец без ограничения NULL или NOT NULL, по умолчанию он равен NULL. Это означает, что этот столбец может принимать значения NULL. Предположим, вы хотите изменить значение столбца No с NULL на NOT NULL, тогда вам нужно использовать команду ALTER, как показано ниже.

ALTER TABLE Student ALTER COLUMN Нет INT NOT NULL

Изменение NOT NULL на NULL.

Если вы хотите изменить столбец NOT NULL на NULL, вы также можете использовать команду ALTER.Например, если вы хотите изменить значение столбца No с NOT NULL на NULL, вы можете использовать команду ALTER, как показано ниже.

ИЗМЕНИТЬ ТАБЛИЦУ Студент ИЗМЕНИТЬ КОЛОНКУ Нет INT NULL

Добавление нового столбца в существующую таблицу в SQL Server:

Если вы хотите добавить новый столбец в существующую таблицу, вы можете использовать команду ALTER. Синтаксис использования команды для добавления нового столбца приведен ниже.

ALTER TABLE ADD [NEW SIZE]

Предположим, вы хотите добавить столбец Branch в существующую таблицу Student.Затем вам нужно использовать команду ALter, как показано ниже.

ALTER TABLE Student ADD Branch VARCHAR (20)

Удаление столбца в SQL Server:

Если вы хотите удалить существующий столбец из таблицы в SQL Server, вам необходимо использовать команду ALTER. Синтаксис использования команды ALTER для удаления или удаления столбца приведен ниже.

ALTER TABLE DROP COLUMN

Например, если вы хотите удалить или отбросить столбец Brach из таблицы Student, вам необходимо использовать команду ALTER , как показано ниже.

ALTER TABLE Student DROP COLUMN Branch

Команда SP_RENAME в SQL Server:

SP обозначает хранимую процедуру, а здесь SP_RENAME — это определяемая системой хранимая процедура. Эта хранимая процедура используется для изменения имени столбца. Синтаксис для использования этой процедуры приведен ниже /

SP_RENAME ‘

. ’, ‘NEW COLUMN NAME’

Предположим, вы хотите изменить столбец имени с Name на StudentName, тогда вам нужно использовать эту хранимую процедуру, как показано ниже.

SP_RENAME ‘Student.Name’, ‘StudentName

Эту хранимую процедуру SP_RENAME можно также использовать для изменения имени таблицы со старого имени таблицы на новое. Синтаксис для изменения имени таблицы с помощью хранимой процедуры SP_RENAME приведен ниже.

SP_RENAME ‘OLD TABLE NAME’, ’NEW TABLE NAME’

Например, если вы хотите изменить имя таблицы с Student на StudentDetails, вам необходимо использовать хранимую процедуру SP_RENAME, как показано ниже:

SP_RENAME «Student», «StudentDetails»

Команда усечения в SQL Server:

Если вы хотите удалить все записи или строки из таблицы без каких-либо условий, вам нужно использовать команду Truncate в SQL Server.Таким образом, с помощью этой команды вы не можете удалить определенные записи из таблицы, потому что команда truncate не поддерживает предложение «, где ». Синтаксис использования команды TRUNCATE приведен ниже.

ОБРЕЗАННАЯ ТАБЛИЦА <ИМЯ ТАБЛИЦЫ>

Предположим, вы хотите удалить все записи из таблицы Student, тогда вам нужно использовать команду TRUNCATE, как показано ниже, в SQL Server.

ТАБЛИЦА TRUNCATE Студент

Примечание: Команда усечения удаляет строки, но не структуру таблицы.

Команда удаления в SQL Server:

Если вы хотите удалить таблицу из базы данных, вам необходимо использовать команду DROP в SQL Server. Синтаксис использования команды DROP приведен ниже.

ТАБЛИЦА ПАДЕНИЯ <ИМЯ ОБЪЕКТА>

Предположим, вы хотите удалить таблицу учеников из базы данных, тогда вам нужно использовать команду DROP, как показано ниже.

КАПЕЛЬНЫЙ СТОЛ Студент

Примечание: Когда таблица удаляется, все зависимые ограничения, связанные с таблицей, также удаляются.Мы не можем отбросить главную таблицу.

В чем разница между командами удаления и усечения в SQL Server?
Удалить Усечь
Это команда DML. Это команда DDL
Используя команду удаления, мы можем удалить определенную запись из таблицы. Но это невозможно с командой усечения.
Delete поддерживает предложение WHERE. Truncate не поддерживает предложение WHERE
Это временное удаление Это постоянное удаление
Delete поддерживает транзакции отката для восстановления удаленных данных. Truncate не поддерживает транзакцию отката, поэтому мы не можем восстановить удаленную информацию
Команда «Удалить» не сбрасывает свойство идентификации. Но он сбросит свойство идентификации

В следующей статье я собираюсь обсудить типы данных в SQL Server с примерами.Здесь, в этой статье, я попытаюсь объяснить создание изменения и удаления таблиц в SQL Server шаг за шагом с некоторыми примерами. Надеюсь, вам понравится эта статья.

Добавление столбца в существующую таблицу в phpMyAdmin

Добавление столбца в таблицу — необходимый шаг в создании работающей базы данных в phpMyAdmin. Если вам нужно настроить базу данных, см. Нашу статью Создание базы данных. Чтобы узнать, как добавить столбцы в базу данных, следуйте инструкциям ниже:

Добавление столбца в уже существующую таблицу базы данных в phpMyAdmin

  1. Войдите в phpMyAdmin.Для получения справки см. Нашу статью Доступ к phpMyAdmin в ACC
  2. .

  3. После входа в систему перейдите на левую боковую панель и щелкните имя таблицы базы данных, в которую вы хотите добавить столбец
    .

    Если у вас еще нет таблиц, вам нужно будет сначала создать таблицу. Столбцы можно легко добавить в новый интерфейс таблицы.

  4. Щелкните Структура на верхней панели навигации Image of structure button
  5. Под существующими столбцами есть строка: Добавить # столбцы
  6. Введите количество столбцов, которые вы хотите добавить, в числовое поле в этой строке image of number field
  7. Выберите расположение новой колонки Image of location selection
  8. Нажмите Перейти

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

Image of details editor

Это добавит ваш столбец в таблицу.

Столбцы таблицы сопоставления

— Документация по SQLAlchemy 1.3

По умолчанию mapper () собирает все столбцы в
сопоставленная таблица в сопоставленные атрибуты объекта, каждый из которых
назван в соответствии с именем самого столбца (в частности, ключ
атрибут столбца ).Такое поведение может быть
модифицирован несколькими способами.

Именование столбцов отдельно от имен атрибутов

Отображение по умолчанию имеет то же имя для
Столбец как столбец сопоставленного атрибута, в частности
он соответствует атрибуту Column.key в Column , который
по умолчанию совпадает с Column.name .

Имя, присвоенное атрибуту Python, который соответствует
Столбец может отличаться от столбца .имя или Column.key
просто назначив его таким образом, как мы проиллюстрировали здесь в декларативном сопоставлении:

Пользователь класса

 (базовый):
    __tablename__ = 'пользователь'
    id = столбец ('user_id', целое число, primary_key = True)
    name = Столбец ('имя_пользователя', Строка (50)) 

Где выше User.id разрешается в столбец с именем user_id
и User.name разрешается в столбец с именем user_name .

При сопоставлении с существующей таблицей объект Столбец
можно напрямую сослаться:

Пользователь класса

 (базовый):
    __table__ = user_table
    id = таблица_пользователей.c.user_id
    name = user_table.c.user_name 

Или в классическом отображении, помещенном в словарь свойств
с желаемым ключом:

 сопоставитель (Пользователь, таблица_пользователей, свойства = {
   'id': user_table.c.user_id,
   'name': user_table.c.user_name,
}) 

В следующем разделе мы более подробно рассмотрим использование .key .

Автоматизация схем именования столбцов на основе отраженных таблиц

В предыдущем разделе именование столбцов отдельно от имен атрибутов мы показали, как
Столбец , явно сопоставленный с классом, может иметь другой атрибут
имя, чем столбец.Но что, если мы не перечисляем столбец
объекты явно, а вместо этого автоматизируют производство Таблица
объекты, использующие отражение (например, как описано в разделе «Отражение объектов базы данных»)?
В этом случае мы можем использовать событие DDLEvents.column_reflect ()
перехватить производство объектов Column и предоставить их
с помощью столбца Column.key на наш выбор:

 @ event.listens_for (таблица, "column_reflect")
def column_reflect (инспектор, таблица, column_info):
    # установить столбец.key = "attr_ "
    column_info ['key'] = "attr_% s"% column_info ['name']. lower () 

При указанном выше событии будет перехвачено отражение объектов Column
с нашим событием, которое добавляет новый элемент «.key», например, в сопоставлении, как показано ниже:

 класс MyClass (Базовый):
    __table__ = Table ("some_table", Base.metadata,
                autoload = True, autoload_with = some_engine) 

Если мы хотим квалифицировать наше событие, чтобы реагировать только на определенные метаданные
объект выше, мы можем проверить его в нашем событии:

 @event.listens_for (таблица, "column_reflect")
def column_reflect (инспектор, таблица, column_info):
    если table.metadata - Base.metadata:
        # set column.key = "attr_ "
        column_info ['key'] = "attr_% s"% column_info ['name']. lower () 

Именование всех столбцов с префиксом

Быстрый подход к префиксу имен столбцов, обычно при сопоставлении
к существующему объекту Table — использовать column_prefix :

Пользователь класса

 (базовый):
    __table__ = user_table
    __mapper_args__ = {'column_prefix': '_'} 

В приведенном выше примере будут размещены имена атрибутов, такие как _user_id , _user_name ,
_ пароль и т. Д.на сопоставленном классе Пользователь .

Этот подход необычен в современном использовании. Для работы с отраженными
таблиц, более гибкий подход заключается в использовании описанного в
Автоматизация схем именования столбцов из отраженных таблиц.

Использование column_property для опций уровня столбца

Параметры можно указать при сопоставлении столбца с помощью
column_property () функция. Эта функция
явно создает свойство ColumnProperty , используемое
mapper () для отслеживания столбца ; обычно
mapper () создает это автоматически.Используя column_property () ,
мы можем передать дополнительные аргументы о том, как нам нравится столбец
быть нанесенным на карту. Ниже мы передаем опцию active_history ,
который указывает, что изменение значения этого столбца должно
в результате сначала загружается прежнее значение:

 из sqlalchemy.orm импорт column_property

класс Пользователь (Базовый):
    __tablename__ = 'пользователь'

    id = столбец (целое число, primary_key = True)
    name = свойство_столбца (Столбец (Строка (50)), active_history = True) 

column_property () также используется для сопоставления одного атрибута с
несколько столбцов.Этот вариант использования возникает при сопоставлении с соединением ()
с атрибутами, которые приравниваются друг к другу:

Пользователь класса

 (базовый):
    __table__ = user.join (адрес)

    # присвоить user.id, address.user_id
    # атрибут "id"
    id = свойство_столбца (user_table.c.id, address_table.c.user_id) 

Дополнительные примеры такого использования см. В разделе «Сопоставление класса с несколькими таблицами».

Еще одно место, где требуется column_property () , — это указать выражения SQL как
сопоставленные атрибуты, например, ниже, где мы создаем атрибут полное имя
это конкатенация строк firstname и lastname
столбцы:

Пользователь класса

 (базовый):
    __tablename__ = 'пользователь'
    id = столбец (целое число, primary_key = True)
    firstname = Столбец (Строка (50))
    lastname = Столбец (Строка (50))
    полное имя = свойство_столбца (имя + "" + фамилия) 

См. Примеры этого использования в разделе «Выражения SQL как сопоставленные атрибуты».

Имя объекта Описание

column_property (* столбцы, ** kwargs)

Предоставляет свойство уровня столбца для использования с сопоставлением.

функция sqlalchemy.orm. свойство_столбца ( * столбцы , ** kwargs )

Предоставляет свойство уровня столбца для использования с сопоставлением.

Свойства на основе столбцов обычно могут быть применены к
свойства словарь с использованием столбца
элемент напрямую.
Используйте эту функцию, если данный столбец не присутствует непосредственно в
возможность выбора картографом; примеры включают выражения SQL, функции,
и скалярные запросы SELECT.

Функция column_property () возвращает экземпляр
Свойство Столбца .

Столбцы, которых нет в выбираемом картографе, не будут
сохраняются сопоставителем и фактически являются атрибутами «только для чтения».

Параметры
  • * cols — список объектов Column для сопоставления.

  • active_history = False — Когда True , указывает, что «предыдущее» значение для
    скалярный атрибут должен быть загружен при замене, если нет
    уже загружен. Обычно логика отслеживания истории для
    простые скалярные значения без первичного ключа должны быть
    известно о «новом» значении, чтобы выполнить промывку. Этот
    флаг доступен для приложений, использующих
    get_history () или сеанс.is_modified ()
    что тоже нужно знать
    «предыдущее» значение атрибута.

  • Comparator_factory — класс, расширяющий
    Компаратор , который предоставляет настраиваемый SQL
    генерация предложения для операций сравнения.

  • группа — имя группы для этого свойства при пометке как отложенное.

  • отложено — если True, свойство столбца «отложено», что означает, что
    он загружается не сразу, а вместо этого загружается, когда
    Атрибут сначала обращается к экземпляру.Смотрите также
    отложенный () .

  • doc — необязательная строка, которая будет применяться как документ на
    связанный с классом дескриптор.

  • expire_on_flush = True — Отключить истечение срока действия при сбросе. Column_property (), который ссылается
    в выражение SQL (а не в отдельный столбец с привязкой к таблице)
    считается свойством «только для чтения»; заселяя это
    не влияет на состояние данных и может только вернуть
    состояние базы данных. По этой причине значение column_property ()
    истекает всякий раз, когда родительский объект участвует в
    flush, то есть имеет любое «грязное» состояние внутри flush.Установка этого параметра на Ложь приведет к
    оставляя любое существующее значение присутствующим после завершения промывки.
    Обратите внимание, однако, что сеанс с истечением срока действия по умолчанию
    настройки все еще истекают
    однако все атрибуты после вызова Session.commit () .

  • info — Дополнительный словарь данных, который будет вставлен в
    MapperProperty.info атрибут этого объекта.

  • extension

    экземпляр AttributeExtension или список расширений,
    который будет добавлен к списку слушателей атрибутов для
    результирующий дескриптор помещается в класс.

Отображение подмножества столбцов таблицы

Иногда объект Таблица становился доступным с помощью
процесс отражения, описанный в разделе «Отражение объектов базы данных для загрузки»
структура таблицы из базы данных.
Для такой таблицы с множеством столбцов, на которые не нужно ссылаться
в приложении include_properties или exclude_properties
аргументы могут указывать, что следует отображать только подмножество столбцов.Например:

Пользователь класса

 (базовый):
    __table__ = user_table
    __mapper_args__ = {
        'include_properties': ['user_id', 'user_name']
    } 

… отобразит класс User в таблицу user_table , включая только
столбцы user_id и user_name — на остальные не ссылаются.
Аналогично:

Адрес класса

 (база):
    __table__ = address_table
    __mapper_args__ = {
        'exclude_properties': ['улица', 'город', 'штат', 'почтовый индекс']
    } 

… сопоставит класс Address с таблицей address_table , включая
присутствуют все столбцы, кроме улица , город , штат и zip .

При использовании этого сопоставления столбцы, которые не включены, не будут
упоминается в любых операторах SELECT, созданных запросом Query , и не будет
быть любым сопоставленным атрибутом сопоставленного класса, который представляет столбец;
присвоение атрибута этого имени не будет иметь никакого эффекта, кроме
обычное присвоение атрибутов Python.

В некоторых случаях несколько столбцов могут иметь одно и то же имя, например, когда
сопоставление с объединением двух или более таблиц с одним и тем же именем столбца. include_properties и exclude_properties также могут содержать
Столбец объектов для более точного описания столбцов
следует включить или исключить:

 класс UserAddress (базовый):
    __table__ = user_table.join (address_table)
    __mapper_args__ = {
        'exclude_properties': [address_table.c.id],
        'primary_key': [user_table.c.id]
    } 

Как использовать вычисляемый столбец в базах данных SQL Server с образцами вычисляемого столбца

Что такое вычисляемый столбец?

Если у вас есть столбцы в таблицах базы данных sql, значения которых зависят от других столбцов, вы можете использовать вычисляемые столбцы.
Использование вычисляемых столбцов или вычисляемых столбцов позволит вам сохранить логику расчета таких вычисленных значений в базе данных.
И избавит вас от лишнего кодирования каждый раз, когда вам потребуется вычисляемый элемент.

Вычисляемый столбец можно определить как выражение, которое может использовать другие столбцы в той же таблице, а также использовать другие значения таблицы с помощью пользовательских функций.
Выражение вычисления может быть непосредственно именем невычисляемого столбца (*), констант, функций, включая sql или пользовательские функции, или может содержать все в определении вычисляемого столбца.
Важно, чтобы выражение вычисляемого столбца не могло быть подзапросом, что означает, что вы не можете использовать операторы SELECT в выражении. Даже если вы выбираете постоянное значение, например «ВЫБРАТЬ 1».

(*) В качестве примечания:
Вычисляемый столбец в таблице нельзя использовать в другом определении вычисляемого столбца в той же таблице.
Вы ссылаетесь на вычисляемый столбец в другой таблице с помощью пользовательской функции в выражении вычисляемого столбца.

Вычисляемые столбцы фактически физически не создаются в связанной таблице базы данных, если они не определены как «постоянные» вычисляемые столбцы.
Вы можете рассматривать вычисляемые столбцы как виртуальные столбцы. Они физически не хранятся в связанной таблице базы данных sql.
Они вычисляются каждый раз, когда на них ссылаются в инструкции sql.
Если вы хотите создать индекс для вычисляемого столбца, тогда
Если вам требуется, чтобы вычисляемый столбец сохранялся в базе данных, а не вычислялся каждый раз, вы должны определить вычисляемый столбец как постоянный, используя ключевое слово «PERSISTED» в CREATE TABLE… ADD столбец или ALTER TABLE … ALTER COLUMN операторы.

Их значения обновляются при изменении любых столбцов, которые являются частью их вычислений.
Пометив вычисляемый столбец как PERSISTED, вы можете создать индекс для вычисляемого столбца, который является детерминированным, но неточным.
Кроме того, если вычисляемый столбец ссылается на функцию CLR, компонент Database Engine не может проверить, действительно ли функция детерминирована.

Вычисляемые столбцы, как и обычные столбцы таблицы, могут использоваться в списке выбора, могут находиться в предложениях WHERE и ORDER BY.
Но вычисляемые столбцы не могут обновляться напрямую или значения не могут быть вставлены в вычисляемые столбцы с помощью операторов INSERT или UPDATE.

Подзапросы в этом контексте не разрешены. Разрешены только скалярные выражения.

Вычисляемый столбец вычисляется на основе выражения. Но выражение не может быть подзапросом.
Если вам нужно выполнить оператор SELECT для сбора необходимых данных для выражения вычисленного значения столбца, то можно использовать пользовательскую функцию.
Вы можете создать определяемую пользователем функцию, которая может запускать операторы SELECT.
Но если вы решите создать или изменить свой вычисляемый столбец для сохранения, вы можете столкнуться с некоторыми другими проблемами, связанными с детерминизмом, особенно для типов данных XML и XQuery.
Вы можете решить проблему создания постоянного вычисляемого столбца, определив определяемую пользователем функцию (udf), которая используется в выражении, используя «WITH SCHEMABINDING» с пользовательской функцией sql.

Невозможно создать постоянные вычисляемые столбцы с использованием пользовательских функций с выбором из других таблиц

Вы не можете создавать вычисляемые столбцы / вычисляемые столбцы как постоянные, если в выражении вычисляемого столбца есть определяемая пользователем функция, и эта функция выполняет запросы SELECT из таблиц базы данных.
Это связано с тем, что если вы используете определяемую пользователем функцию sql в выражении вычисляемого столбца, чтобы вычисляемый столбец сохранялся, udf должен быть детерминированным.
Для детерминизма такой функции sql вы должны определить определяемую пользователем функцию t-sql с помощью «WITH SCHEMABINDING».
В этом случае для привязки схемы потребуются имена таблиц в двухчастном формате.
И когда вы изменяете функцию sql с именами таблиц в формате, состоящем из двух частей, включая имя схемы и подсказку «WITH SCHEMABINDING», на этот раз функцию нельзя будет использовать в выражении постоянного столбца.
Потому что тогда столбец будет определяться с доступом к пользовательским данным, что не подходит для постоянного вычисляемого столбца.

Примеры кодов вычисляемых столбцов T-SQL для таблиц SQL Server

Здесь вы можете найти примеры, в которых вычисляемые свойства столбца иллюстрируются образцом кода t-sql.


СОЗДАТЬ ТАБЛИЦУ Авторы
(
AuthorId int IDENTITY (1,1) NOT NULL,
Имя nvarchar (100),
Фамилия nvarchar (100),
FullName AS (FirstName + SPACE (1) + LastName) - вычисляемый столбец
)

В приведенном выше примере таблицы вычисленный столбец FullName определен как объединение двух других значений столбца в той же таблице.
Это простой пример выражения. Мы определяем вычисляемый столбец с помощью предложения « AS » и видим, что мы не определяем тип столбца, поскольку тип определяется неявно выражением вычисления.


ВСТАВИТЬ АВТОРОВ (Имя, Фамилия) ЗНАЧЕНИЯ (N'Roger ', N'Wolter')
ВСТАВИТЬ АВТОРОВ (Имя, Фамилия) ЗНАЧЕНИЯ (N'Dejan ', N'Sarka')
ВЫБРАТЬ * ИЗ авторов

Давайте добавим другой вычисляемый столбец, в котором выражение CASE используется в определении значения вычисляемого столбца.


ALTER TABLE Authors ADD FullName2 AS (CASE WHEN AuthorId <3 THEN LastName + SPACE (1) + FirstName ELSE FirstName + SPACE (1) + LastName END)

Теперь вставьте данные в таблицу sql и посмотрите результаты.


ВСТАВИТЬ АВТОРОВ (Имя, Фамилия) ЗНАЧЕНИЯ (N'Itzik ', N'Ben-Gan')
ВЫБРАТЬ * ИЗ авторов

Давайте теперь создадим вспомогательную таблицу базы данных SQL Server, которую мы будем использовать в следующих примерах.


Создать таблицу DBParameters (
ParameterId int Identity (1,1) НЕ NULL,
Параметр Описание nvarchar (1000),
ParameterValue nvarchar (1000)
)
GO
вставить в DBParameters выберите N'First Name is before Last Name ', N'1'

А теперь мы попробуем использовать запрос подвыбора в выражении вычисляемого столбца.


ALTER TABLE Authors ДОБАВИТЬ FullName3 AS (СЛУЧАЙ, КОГДА СУЩЕСТВУЕТ (ВЫБРАТЬ * ИЗ DBParameters) ЗАТЕМ LastName + SPACE (1) + FirstName ELSE FirstName + SPACE (1) + LastName END)

И ошибка, которую выдаст SQL Engine:


Сообщение 1046, уровень 15, состояние 1, строка 1
Подзапросы в этом контексте недопустимы.Разрешены только скалярные выражения.

Поскольку подзапросы не разрешены, я создам пользовательскую функцию для реализации того же элемента управления.


СОЗДАТЬ ФУНКЦИЮ GetBooleanParameterValue (
@ParameterId как int
) RETURNS бит
AS
НАЧАТЬ
ЗАЯВИТЬ @result бит
ВЫБРАТЬ @result = CAST (ParameterValue AS bit) FROM DBParameters WHERE ParameterId = @ParameterId
ВОЗВРАТ @result
КОНЕЦ
GO
ВЫБЕРИТЕ dbo.GetBooleanParameterValue (1)

Теперь я попробую использовать определяемую пользователем функцию вместо запроса подвыбора.


ALTER TABLE Авторы ДОБАВИТЬ FullName3 AS (СЛУЧАЙ, КОГДА dbo.GetBooleanParameterValue (1) = 1 ТОГДА (Имя + ПРОБЕЛ (1) + Фамилия) Иначе (Фамилия + ПРОБЕЛ (1) + Имя) КОНЕЦ)


ОБНОВЛЕНИЕ DBParameters SET ParameterValue = 1 WHERE ParameterId = 1
ВЫБЕРИТЕ FirstName, LastName, FullName3 FROM Authors

ОБНОВЛЕНИЕ DBParameters SET ParameterValue = 0 WHERE ParameterId = 1
ВЫБЕРИТЕ FirstName, LastName, FullName3 от авторов

При первом выборе отображается имя перед фамилией в полном имени.
И после обновления таблицы параметров второй выбор отображает фамилии перед последним.

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


СОЗДАТЬ ТАБЛИЦУ [Опыт автора]
(
Id int Identity (1,1) NOT NULL,
AuthorId int,
Экспертиза nvarchar (1000) NOT NULL
)
GO

INSERT INTO [Авторская экспертиза] SELECT 1, N'T-SQL '
ВСТАВИТЬ В [Экспертиза автора] ВЫБОР 1, N'CLR '
ВСТАВИТЬ В [Опыт автора] ВЫБОР 2, N'CLR '
ВСТАВИТЬ В [Экспертиза автора] ВЫБОР 2, N'XML '
ВСТАВИТЬ В [Опыт автора] SELECT 3, N'T-SQL '
ВСТАВИТЬ В [Опыт автора] ВЫБОР 3, N'CLR '
ВСТАВИТЬ В [Авторская экспертиза] SELECT 3, N'Service Broker '
GO

СОЗДАТЬ ФУНКЦИЮ GetAuthorExpertiseCount (
@AuthorId как int
) ВОЗВРАТ int
AS
НАЧАТЬ
ОБЪЯВИТЬ @result int
ВЫБЕРИТЕ @result = COUNT (*) ОТ [Опыт автора] ГДЕ AuthorId = @AuthorId
ВОЗВРАТ @result
КОНЕЦ
GO

ВЫБРАТЬ dbo.GetAuthorExpertiseCount (3)


ALTER TABLE Авторы ДОБАВИТЬ Expertise_Topics_Count AS (dbo.GetAuthorExpertiseCount (AuthorId))
ВЫБРАТЬ * ИЗ авторов


ИЗМЕНИТЬ ТАБЛИЦУ Авторы ДОБАВИТЬ BooksInfo XML
GO
ОБНОВЛЕНИЕ Авторы
УСТАНОВИТЬ BooksInfo = N '
<книги>

Microsoft SQL Server 2005


Microsoft SQL Server 2008

'
ГДЕ AuthorId = 3
GO
СОЗДАТЬ ФУНКЦИЮ GetLastBookTitle (
@BooksInfo XML
) ВОЗВРАТ nvarchar (1000)
AS
НАЧАТЬ
ОБЯЗАТЕЛЬНО @Title nvarchar (1000)

выберите
@ Название = i.значение ('@ название', 'nvarchar (1000)')
из @ BooksInfo.nodes ('/ books / book') n (i)
упорядочить по CONVERT (datetime, i.value ('./ publishdate [1] /.', 'nvarchar (1000)'), 103) desc

RETURN @Title
КОНЕЦ
GO
ALTER TABLE Авторы ДОБАВИТЬ LastBookTitle как dbo.GetLastBookTitle (BooksInfo)
GO
ВЫБЕРИТЕ AuthorId, Fullname3, BooksInfo, LastBookTitle ОТ авторов


ИЗМЕНИТЬ ТАБЛИЦУ Авторы ДОБАВИТЬ Дата рождения Дата и время
GO
ОБНОВЛЕНИЕ Авторы SET BirthDate = '19700101' ГДЕ AuthorId = 1
GO
ALTER TABLE Авторы ДОБАВИТЬ возраст КАК DATEDIFF (yy, BirthDate, GETDATE ())

Давайте добавим другую возрастную таблицу, которая зависит от другого вычисляемого столбца.


ИЗМЕНИТЬ ТАБЛИЦУ Авторы ДОБАВИТЬ Возраст2 КАК ДАТА ДОБАВИТЬ (гг, Возраст, Дата рождения)

К сожалению, вычисляемый столбец не может быть основан на другом вычисляемом поле.
Сообщение об ошибке SQL Server будет:

Msg 1759, уровень 16, состояние 0, строка 1
Вычисляемый столбец "Возраст" в таблице "Авторы" нельзя использовать в другом определении вычисляемого столбца.

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


СОЗДАТЬ ФУНКЦИЮ TestUDF (
@Age int,
@BirthDate datetime
) ВОЗВРАЩАЕТСЯ datetime
AS
НАЧАТЬ
ДОБАВИТЬ ДАТУ ВОЗВРАТА (гг, @Age, @BirthDate)
КОНЕЦ
GO
ALTER TABLE Авторы ДОБАВИТЬ Age2 AS dbo.TestUDF (Возраст, Дата рождения)

Механизм SQL выдаст следующее сообщение об ошибке в этой команде ALTER TABLE.

Msg 1759, уровень 16, состояние 0, строка 1
Вычисляемый столбец "Возраст" в таблице "Авторы" нельзя использовать в другом определении вычисляемого столбца.

А как насчет того, чтобы определить вычисляемый столбец как столбец PERSISTED, чтобы создавать индексы для этих столбцов.


ALTER TABLE Авторы ДОБАВИТЬ LastBookTitlePersisted AS dbo.GetLastBookTitle (BooksInfo) Persisted

Msg 4936, уровень 16, состояние 1, строка 1
Вычисляемый столбец «LastBookTitlePersisted» в таблице «Авторы» не может быть сохранен, поскольку столбец недетерминирован.

Причина, по которой мы не можем определить столбец LastBookTitlePersisted как PERSISTED, заключается в том, что вычисляемый столбец не является детерминированным из-за пользовательской функции dbo.GetLastBookTitle () - это функция на основе XML.
Но решение этой проблемы для этого udf простое.
Если мы изменим процедуру, добавив подсказку «WITH SCHEMABINDING», мы сможем управлять сохранением связанного столбца.


СОЗДАТЬ ФУНКЦИЮ GetLastBookTitle2 (
@BooksInfo XML
) ВОЗВРАТ nvarchar (1000)
WITH SCHEMABINDING - "WITH SCHEMABINDING" необходим, если я хочу, чтобы столбец был постоянным вычисляемым столбцом
.
AS
BEGIN

DECLARE @Title nvarchar (1000)

select
@ Название = i.значение ('@ название', 'nvarchar (1000)')
из @ BooksInfo.nodes ('/ books / book') n (i)
упорядочить по CONVERT (datetime, i.value ('./ publishdate [1] /.', 'nvarchar (1000)'), 103) desc

RETURN @Title
КОНЕЦ

Теперь мы можем успешно создать столбец как постоянный.


ALTER TABLE Авторы ДОБАВИТЬ LastBookTitlePersisted как dbo.GetLastBookTitle2 (BooksInfo) Persisted

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *