Как добавить null в sql
Перейти к содержимому

Как добавить null в sql

  • автор:

Обработка значений NULL

Значение NULL в реляционной базе данных используется, если значение в столбце неизвестно или отсутствует. NULL не является ни пустой строкой (для типов данных character или datetime), ни нулевым значением (для числовых типов данных). В спецификации ANSI SQL-92 указано, что значение NULL должно быть одинаковым для всех типов данных, чтобы все значения NULL обрабатывались согласованно. Пространство имен System.Data.SqlTypes обеспечивает семантику со значением NULL, реализуя интерфейс INullable. Каждый из типов данных в System.Data.SqlTypes имеет собственное свойство IsNull и значение Null , которое может быть назначено экземпляру этого типа данных.

В платформа .NET Framework версии 2.0 появилась поддержка типов значений, допускающих значение NULL, что позволяет программистам расширить тип значения для представления всех значений базового типа. Эти типы значений Nullable CLR, допускающие значение NULL, представляют экземпляр структуры. Эта возможность особенно полезна, если типы значений упакованы и распакованы, что обеспечивает улучшенную совместимость с типами объектов. Типы значений, допускающие значение CLR, не предназначены для хранения значений NULL базы данных, так как значение NULL ANSI SQL не ведет себя так же, как null ссылка (или Nothing в Visual Basic). Для работы со значениями NULL в базе данных ANSI SQL используйте значения NULL System.Data.SqlTypes вместо Nullable. Дополнительные сведения о работе со значениями CLR, допускающих значение NULL, в Visual Basic см. в разделе «Типы значений, допускающие значение NULL», и для C# см . типы значений, допускающие значение NULL.

Значения NULL и тройственная логика

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

Так как значение NULL считается неизвестным, два значения NULL, сравниваемые друг с другом, не считаются равными. В выражениях, использующих арифметические операторы, если какой-либо из операндов имеет значение NULL, результат также равен NULL.

Значения NULL и SqlBoolean

При сравнении между любыми типами System.Data.SqlTypes будет возвращаться значение SqlBoolean. Функция IsNull для каждого типа SqlType возвращает SqlBoolean и может использоваться для проверки на наличие значений NULL. В следующих таблицах истинности показано, как работают операторы AND, OR и NOT при наличии значения NULL. (T = true, F = false и U = неизвестно или NULL.)

Основные сведения о параметре ANSI_NULLS

System.Data.SqlTypes предоставляет ту же семантику, что и при установке параметра ANSI_NULLS в SQL Server. Все арифметические операторы (+, -, *, /, %, побитовые операторы (~, &, |) и большинство функций возвращают значение NULL, если любой из операндов или аргументов имеет значение NULL, за исключением свойства IsNull .

Стандарт ANSI SQL-92 не поддерживает columnName = NULL в предложении WHERE. В SQL Server параметр ANSI_NULLS управляет допустимостью значений NULL по умолчанию в базе данных и вычислением сравнений со значениями NULL. Если параметр ANSI_NULLS включен (по умолчанию), то при проверке на наличие значений NULL в выражениях должен использоваться оператор IS NULL. Например, результатом следующего сравнения всегда является неизвестность при включенном параметре ANSI_NULLS:

colname > NULL 

Сравнение с переменной, содержащей значение NULL, также приводит к неизвестному результату:

colname > @MyVariable 

Для тестирования на значение NULL используются предикаты IS NULL и IS NOT NULL. Это может усложнить предложение WHERE. Например, столбец TerritoryID в таблице AdventureWorks Customer допускает значения NULL. Если инструкция SELECT используется для тестирования на значения NULL в дополнение к другим, она должна включать предикат IS NULL:

SELECT CustomerID, AccountNumber, TerritoryID FROM AdventureWorks.Sales.Customer WHERE TerritoryID IN (1, 2, 3) OR TerritoryID IS NULL 

Если в SQL Server параметр ANSI_NULLS отключен, можно создать выражения, которые используют оператор равенства для сравнения со значением NULL. Однако нельзя запретить другим подключениям задавать параметры NULL для этого подключения. Использование параметра IS NULL для проверки на наличие значений NULL всегда работает, независимо от установленного значения ANSI_NULLS для подключения.

Установка ANSI_NULLS OFF не поддерживается в DataSet , который всегда соответствует стандарту ANSI SQL-92 для обработки значений NULL в System.Data.SqlTypes.

Присвоение значений Null

Значения NULL являются специальными, и их семантика хранения и назначения различается в разных системах типов и системах хранения. Dataset предназначен для использования с различными системами типов и хранения.

В этом разделе описывается семантика значений NULL для присвоения значений NULL для DataColumn в DataRow в различных системах типов.

DBNull.Value
Это назначение допустимо для любого типа DataColumn . Если тип реализует INullable , DBNull.Value приводится к соответствующему строго типизированному значению NULL.

SqlType.Null
Все типы данных System.Data.SqlTypes реализуют INullable . Если строго типизированное значение NULL может быть преобразовано в тип данных столбца с помощью операторов неявного приведения, то назначение должно быть принятым. Иначе будет вызвано исключение недопустимого приведения.

null
Если значение NULL является допустимым для указанного типа данных DataColumn , оно приводится к соответствующему значению DbNull.Value или Null , связанному с типом INullable ( SqlType.Null ).

derivedUdt.Null
Для столбцов пользовательского типа значения NULL всегда хранятся в зависимости от типа, связанного с DataColumn . Рассмотрим случай пользовательского типа, связанного с DataColumn , который не реализует INullable в отличие от своего подкласса. В этом случае, если назначено строго типизированное значение NULL, связанное с производным классом, оно сохраняется как нетипизированное значение DbNull.Value , так как хранилище значений NULL всегда согласуется с типом данных DataColumn.

В настоящее время структура Nullable или Nullable не поддерживается в DataSet .

Значение по умолчанию для любого экземпляра System.Data.SqlTypes— NULL.

Значения NULL в System.Data.SqlTypes относятся к определенному типу и не могут быть представлены одним значением, таким как DbNull . Чтобы проверить на наличие значений NULL, используйте свойство IsNull .

Значения NULL могут быть назначены DataColumn, как показано в следующем примере кода. Вы можете напрямую назначить значения NULL для переменных SqlTypes без запуска исключения.

Пример

В следующем примере кода показано создание DataTable с двумя столбцами, определенными как SqlInt32 и SqlString. Код добавляет одну строку известных значений, одну строку значений NULL, а затем выполняет итерацию по DataTable, присваивая значения переменным и отображая выходные данные в окне консоли.

static void WorkWithSqlNulls() < DataTable table = new(); // Specify the SqlType for each column. DataColumn idColumn = table.Columns.Add("ID", typeof(SqlInt32)); DataColumn descColumn = table.Columns.Add("Description", typeof(SqlString)); // Add some data. DataRow nRow = table.NewRow(); nRow["ID"] = 123; nRow["Description"] = "Side Mirror"; table.Rows.Add(nRow); // Add null values. nRow = table.NewRow(); nRow["ID"] = SqlInt32.Null; nRow["Description"] = SqlString.Null; table.Rows.Add(nRow); // Initialize variables to use when // extracting the data. SqlBoolean isColumnNull = false; SqlInt32 idValue = SqlInt32.Zero; SqlString descriptionValue = SqlString.Null; // Iterate through the DataTable and display the values. foreach (DataRow row in table.Rows) < // Assign values to variables. Note that you // do not have to test for null values. idValue = (SqlInt32)row["ID"]; descriptionValue = (SqlString)row["Description"]; // Test for null value in ID column. isColumnNull = idValue.IsNull; // Display variable values in console window. Console.Write("isColumnNull=, Description=", isColumnNull, idValue, descriptionValue); Console.WriteLine(); > 
Private Sub WorkWithSqlNulls() Dim table As New DataTable() ' Specify the SqlType for each column. Dim idColumn As DataColumn = _ table.Columns.Add("ID", GetType(SqlInt32)) Dim descColumn As DataColumn = _ table.Columns.Add("Description", GetType(SqlString)) ' Add some data. Dim row As DataRow = table.NewRow() row("ID") = 123 row("Description") = "Side Mirror" table.Rows.Add(row) ' Add null values. row = table.NewRow() row("ID") = SqlInt32.Null row("Description") = SqlString.Null table.Rows.Add(row) ' Initialize variables to use when ' extracting the data. Dim isColumnNull As SqlBoolean = False Dim idValue As SqlInt32 = SqlInt32.Zero Dim descriptionValue As SqlString = SqlString.Null ' Iterate through the DataTable and display the values. For Each row In table.Rows ' Assign values to variables. Note that you ' do not have to test for null values. idValue = CType(row("ID"), SqlInt32) descriptionValue = CType(row("Description"), SqlString) ' Test for null value with ID column isColumnNull = idValue.IsNull ' Display variable values in console window. Console.Write("isColumnNull=, Description=", _ isColumnNull, idValue, descriptionValue) Console.WriteLine() Next row End Sub 

В этом примере отображаются следующие результаты:

isColumnNull=False, Description=Side Mirror isColumnNull=True, Description=Null 

Присвоение для многих столбцов или строк

DataTable.Add , DataTable.LoadDataRow или другие API-интерфейсы, принимающие массив ItemArray, который сопоставляется со строкой, сопоставляют значение NULL со значением по умолчанию DataColumn. Если объект в массиве содержит DbNull.Value или строго типизированный аналог, применяются те же правила, которые описаны выше.

Кроме того, следующие правила применяются к экземпляру назначений NULL DataRow.[«columnName»] :

  1. Значение по умолчанию для DbNull.Value всех, кроме строго типизированных столбцов NULL, где оно является соответствующим строго типизированным значением NULL.
  2. Значения NULL никогда не записываются во время сериализации в XML-файлы (как в xsi:nil).
  3. Все значения, в том числе по умолчанию, отличные от NULL, всегда записываются при сериализации в XML. Это отличается от семантики XSD/XML, где значение NULL (xsi: nil) является явным, а значение по умолчанию — неявным (если отсутствует в XML, то проверяющее средство синтаксического анализа может получить его из связанной схемы XSD). Обратное верно для DataTable : значение NULL является неявным, а значение по умолчанию — явным.
  4. Всем отсутствующим значениям столбцов для строк, считываемых из входных данных XML, присваивается значение NULL. Строкам, созданным с помощью NewRow или аналогичных методов, присваивается значение по умолчанию DataColumn.
  5. Метод IsNull возвращает true как для DbNull.Value , так и для INullable.Null .

Сравнение значений NULL с типами SqlType и CLR

При сравнении значений NULL важно понимать разницу между тем, как метод Equals вычисляет значения NULL в System.Data.SqlTypes по сравнению с тем, как он работает с типами CLR. Все методы System.Data.SqlTypes Equals используют семантику базы данных для вычисления значений NULL. Если одно или оба значения являются NULL, результатом сравнения будет NULL. С другой стороны, при использовании метода Equals CLR для двух System.Data.SqlTypes вернется значение true, если оба значения соответствуют NULL. Это отражает разницу между использованием метода экземпляра, такого как метод String.Equals CLR, и использованием статического или общего метода SqlString.Equals .

В следующем примере показана разница результатов между методами SqlString.Equals и String.Equals , если каждому из них передается пара значений NULL, а затем пара пустых строк.

 static void CompareNulls() < // Create two new null strings. SqlString a = new(); SqlString b = new(); // Compare nulls using static/shared SqlString.Equals. Console.WriteLine("SqlString.Equals shared/static method:"); Console.WriteLine(" Two nulls=", SqlStringEquals(a, b)); // Compare nulls using instance method String.Equals. Console.WriteLine(); Console.WriteLine("String.Equals instance method:"); Console.WriteLine(" Two nulls=", StringEquals(a, b)); // Make them empty strings. a = ""; b = ""; // When comparing two empty strings (""), both the shared/static and // the instance Equals methods evaluate to true. Console.WriteLine(); Console.WriteLine("SqlString.Equals shared/static method:"); Console.WriteLine(" Two empty strings=", SqlStringEquals(a, b)); Console.WriteLine(); Console.WriteLine("String.Equals instance method:"); Console.WriteLine(" Two empty strings=", StringEquals(a, b)); > static string SqlStringEquals(SqlString string1, SqlString string2) < // SqlString.Equals uses database semantics for evaluating nulls. var returnValue = SqlString.Equals(string1, string2).ToString(); return returnValue; >static string StringEquals(SqlString string1, SqlString string2) < // String.Equals uses CLR type semantics for evaluating nulls. var returnValue = string1.Equals(string2).ToString(); return returnValue; >> 
Private Sub CompareNulls() ' Create two new null strings. Dim a As New SqlString Dim b As New SqlString ' Compare nulls using static/shared SqlString.Equals. Console.WriteLine("SqlString.Equals shared/static method:") Console.WriteLine(" Two nulls=", SqlStringEquals(a, b)) ' Compare nulls using instance method String.Equals. Console.WriteLine() Console.WriteLine("String.Equals instance method:") Console.WriteLine(" Two nulls=", StringEquals(a, b)) ' Make them empty strings. a = "" b = "" ' When comparing two empty strings (""), both the shared/static and ' the instance Equals methods evaluate to true. Console.WriteLine() Console.WriteLine("SqlString.Equals shared/static method:") Console.WriteLine(" Two empty strings=", SqlStringEquals(a, b)) Console.WriteLine() Console.WriteLine("String.Equals instance method:") Console.WriteLine(" Two empty strings=", StringEquals(a, b)) End Sub Private Function SqlStringEquals(ByVal string1 As SqlString, _ ByVal string2 As SqlString) As String ' SqlString.Equals uses database semantics for evaluating nulls. Dim returnValue As String = SqlString.Equals(string1, string2).ToString() Return returnValue End Function Private Function StringEquals(ByVal string1 As SqlString, _ ByVal string2 As SqlString) As String ' String.Equals uses CLR type semantics for evaluating nulls. Dim returnValue As String = string1.Equals(string2).ToString() Return returnValue End Function 

Получается следующий вывод:

SqlString.Equals shared/static method: Two nulls=Null String.Equals instance method: Two nulls=True SqlString.Equals shared/static method: Two empty strings=True String.Equals instance method: Two empty strings=True 

См. также

  • Типы данных SQL Server и ADO.NET
  • Общие сведения об ADO.NET

Сохранение значений NULL или значений по умолчанию при массовом импорте данных (SQL Server)

При импорте данных в таблицу команда bcp и инструкция BULK INSERT используют значения по умолчанию, которые определены для столбцов таблицы. Например, если поле в файле данных имеет значение NULL, вместо него загружается значение по умолчанию соответствующего столбца. И команда bcp , и инструкция BULK INSERT позволяют пользователю указать, следует ли оставлять значения NULL.

Обычная инструкция INSERT, напротив, оставляет значение NULL и не использует значения по умолчанию. Инструкция INSERT . Инструкция SELECT * FROM OPENROWSET(BULK. ) ведет себя так же, как обычная инструкция INSERT, но поддерживает табличное указание для загрузки значений по умолчанию.

Сохранение значений NULL

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

Get-Help Квалификатор Тип квалификатора
bcp -k Параметр
BULK INSERT KEEPNULLS* Аргумент
Инструкции INSERT . SELECT * FROM OPENROWSET(BULK. ). Недоступно Н/Д

* Если значения по умолчанию недоступны для BULK INSERT, необходимо определить столбец таблицы, чтобы разрешить значения NULL.

Эти квалификаторы отключают проверку определений DEFAULT для таблицы командами массового импорта. Однако для одновременно выполняемых инструкций INSERT определения DEFAULT требуются.

Использование значений по умолчанию с помощью инструкции INSERT . SELECT * FROM OPENROWSET(BULK. )

Можно указать, что вместо пустых полей в файле данных необходимо вставить значения по умолчанию соответствующих столбцов (если они заданы). Чтобы использовать значения по умолчанию, используйте табличную подсказку KEEPDEFAULTS.

Пример условий теста

Примеры в этом разделе основаны на таблице, файле данных и файле форматирования, которые определены ниже.

Образец таблицы

Приведенный ниже сценарий создает тестовую базу данных и таблицу с именем myNulls . Заметьте, что в четвертом столбце таблицы ( Kids ) хранится значение по умолчанию. Выполните следующий запрос Transact-SQL в Microsoft SQL Server Management Studio (SSMS):

CREATE DATABASE TestDatabase; GO USE TestDatabase; CREATE TABLE dbo.myNulls ( PersonID smallint not null, FirstName varchar(25), LastName varchar(30), Kids varchar(13) DEFAULT 'Default Value', BirthDate date ); 

Образец файла данных

С помощью Блокнота создайте пустой файл D:\BCP\myNulls.bcp и вставьте данные, приведенные ниже. Обратите внимание, что в третьей записи в четвертом столбце значение отсутствует.

1,Anthony,Grosse,Yes,1980-02-23 2,Alica,Fatnowna,No,1963-11-14 3,Stella,Rosenhain,,1992-03-02 

Кроме того, можно выполнить следующий сценарий PowerShell для создания и заполнения файла данных:

cls # revise directory as desired $dir = 'D:\BCP\'; $bcpFile = $dir + 'MyNulls.bcp'; # Confirm directory exists IF ((Test-Path -Path $dir) -eq 0) < Write-Host "The path $dir does not exist; please create or modify the directory."; RETURN; >; # clear content, will error if file does not exist, can be ignored Clear-Content -Path $bcpFile -ErrorAction SilentlyContinue; # Add data Add-Content -Path $bcpFile -Value '1,Anthony,Grosse,Yes,1980-02-23'; Add-Content -Path $bcpFile -Value '2,Alica,Fatnowna,No,1963-11-14'; Add-Content -Path $bcpFile -Value '3,Stella,Rosenhain,,1992-03-02'; #Review content Get-Content -Path $bcpFile; Invoke-Item $bcpFile; 

Образец файла форматирования в формате, отличном от XML

SQL Server поддерживает два типа файлов форматирования: файлы форматирования в формате, отличном от XML, и XML-файлы форматирования. Файл форматирования не в формате XML поддерживается более ранними версиями SQL Server. Дополнительные сведения см. в разделе Файлы формата, отличные от XML (SQL Server) . Следующая команда будет использовать служебную программу bcp для создания файла форматирования myNulls.fmt в формате, отличном от XML, на основе схемы myNulls . Чтобы создать файл форматирования с помощью служебной программы bcp , укажите аргумент format , а вместо пути файла данных задайте значение nul . Параметр format также требует наличия параметра -f . Кроме того, в этом примере квалификатор c используется для указания символьных данных, t, используется для указания запятой в качестве признака конца поля, а T используется для указания доверенного подключения с использованием встроенной системы безопасности. В командной строке введите следующую команду:

bcp TestDatabase.dbo.myNulls format nul -c -f D:\BCP\myNulls.fmt -t, -T REM Review file Notepad D:\BCP\myNulls.fmt 

Убедитесь, что файл форматирования не в формате XML заканчивается символом перевода строки или возврата каретки. В противном случае, скорее всего, появится следующее сообщение об ошибке:

SQLState = S1000, NativeError = 0
Error = [Microsoft][ODBC Driver 13 for SQL Server]I/O error while reading BCP format file

Дополнительные сведения о создании файлов форматирования см. в статье Создание файла форматирования (SQL Server).

Сохранение значений NULL или использование значений по умолчанию при массовом импорте данных

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

Использование команды bcp и сохранение значений NULL без файла форматирования

Параметр -k . В командной строке введите следующую команду:

REM Truncate table (for testing) SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNulls;" REM Import data bcp TestDatabase.dbo.myNulls IN D:\BCP\myNulls.bcp -c -t, -T -k REM Review results SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNulls;" 

Использование команды bcp и сохранение значений NULL с помощью файла форматирования в формате, отличном от XML

Параметры -k и -f . В командной строке введите следующую команду:

REM Truncate table (for testing) SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNulls;" REM Import data bcp TestDatabase.dbo.myNulls IN D:\BCP\myNulls.bcp -f D:\BCP\myNulls.fmt -T -k REM Review results SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNulls;" 

Использование команды bcp и значений по умолчанию без файла форматирования

В командной строке введите следующую команду:

REM Truncate table (for testing) SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNulls;" REM Import data bcp TestDatabase.dbo.myNulls IN D:\BCP\myNulls.bcp -c -t, -T REM Review results SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNulls;" 

Использование команды bcp и значений по умолчанию с помощью файла форматирования в формате, отличном от XML

Параметр -f . В командной строке введите следующую команду:

REM Truncate table (for testing) SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.myNulls;" REM Import data bcp TestDatabase.dbo.myNulls IN D:\BCP\myNulls.bcp -f D:\BCP\myNulls.fmt -T REM Review results SQLCMD -Q "SELECT * FROM TestDatabase.dbo.myNulls;" 

Использование инструкции BULK INSERT и сохранение значений NULL без файла форматирования

АргументKEEPNULLS . Выполните следующий запрос Transact-SQL в Microsoft SQL Server Management Studio (SSMS):

USE TestDatabase; GO TRUNCATE TABLE dbo.myNulls; -- for testing BULK INSERT dbo.myNulls FROM 'D:\BCP\myNulls.bcp' WITH ( DATAFILETYPE = 'char', FIELDTERMINATOR = ',', KEEPNULLS ); -- review results SELECT * FROM TestDatabase.dbo.myNulls; 

Использование инструкции BULK INSERT и сохранение значений NULL с помощью файла форматирования в формате, отличном от XML

KEEPNULLS и аргумент FORMATFILE . Выполните следующий запрос Transact-SQL в Microsoft SQL Server Management Studio (SSMS):

USE TestDatabase; GO TRUNCATE TABLE dbo.myNulls; -- for testing BULK INSERT dbo.myNulls FROM 'D:\BCP\myNulls.bcp' WITH ( FORMATFILE = 'D:\BCP\myNulls.fmt', KEEPNULLS ); -- review results SELECT * FROM TestDatabase.dbo.myNulls; 

Использование инструкции BULK INSERT и значений по умолчанию без файла форматирования

Выполните следующий запрос Transact-SQL в Microsoft SQL Server Management Studio (SSMS):

USE TestDatabase; GO TRUNCATE TABLE dbo.myNulls; -- for testing BULK INSERT dbo.myNulls FROM 'D:\BCP\myNulls.bcp' WITH ( DATAFILETYPE = 'char', FIELDTERMINATOR = ',' ); -- review results SELECT * FROM TestDatabase.dbo.myNulls; 

Использование инструкции BULK INSERT и значений по умолчанию с помощью файла форматирования в формате, отличном от XML

АргументFORMATFILE . Выполните следующий запрос Transact-SQL в Microsoft SQL Server Management Studio (SSMS):

USE TestDatabase; GO TRUNCATE TABLE dbo.myNulls; -- for testing BULK INSERT dbo.myNulls FROM 'D:\BCP\myNulls.bcp' WITH ( FORMATFILE = 'D:\BCP\myNulls.fmt' ); -- review results SELECT * FROM TestDatabase.dbo.myNulls; 

Использование инструкции OPENROWSET(BULK. ) и сохранение значений NULL с помощью файла форматирования в формате, отличном от XML

АргументFORMATFILE . Выполните следующий запрос Transact-SQL в Microsoft SQL Server Management Studio (SSMS):

USE TestDatabase; GO TRUNCATE TABLE dbo.myNulls; -- for testing INSERT INTO dbo.myNulls SELECT * FROM OPENROWSET ( BULK 'D:\BCP\myNulls.bcp', FORMATFILE = 'D:\BCP\myNulls.fmt' ) AS t1; -- review results SELECT * FROM TestDatabase.dbo.myNulls; 

Использование инструкции OPENROWSET(BULK. ) и значений по умолчанию с помощью файла форматирования в формате, отличном от XML

Табличное указаниеKEEPDEFAULTS и аргумент FORMATFILE . Выполните следующий запрос Transact-SQL в Microsoft SQL Server Management Studio (SSMS):

USE TestDatabase; GO TRUNCATE TABLE dbo.myNulls; -- for testing INSERT INTO dbo.myNulls WITH (KEEPDEFAULTS) SELECT * FROM OPENROWSET ( BULK 'D:\BCP\myNulls.bcp', FORMATFILE = 'D:\BCP\myNulls.fmt' ) AS t1; -- review results SELECT * FROM TestDatabase.dbo.myNulls; 

Связанные задачи

  • Сохранение значений идентификаторов при массовом импорте данных (SQL Server)
  • Подготовка данных к массовому экспорту или импорту (SQL Server)

Использование файла форматирования

  • Создание файла форматирования (SQL Server)
  • Использование файла форматирования для массового импорта данных (SQL Server)
  • Использование файла форматирования для сопоставления столбцов таблицы с полями файла данных (SQL Server)
  • Использование файла форматирования для пропуска поля данных (SQL Server)
  • Пропуск столбца таблицы с помощью файла форматирования (SQL Server)

Использование форматов данных для массового импорта или экспорта

  • Импорт данных в собственном и символьном формате из предыдущих версий SQL Server
  • Использование символьного формата для импорта или экспорта данных (SQL Server)
  • Использование собственного формата для импорта или экспорта данных (SQL Server)
  • Использование символьного формата Юникода для импорта и экспорта данных (SQL Server)
  • Использование собственного формата Юникода для импорта или экспорта данных (SQL Server)

Задание форматов данных для совместимости с помощью программы bcp

  • Определение признаков конца поля и строки (SQL Server)
  • Определение длины префикса в файлах данных с помощью программы bcp (SQL Server)
  • Указание типа файлового хранилища с помощью программы bcp (SQL Server)

Как добавить null в sql

Summary: in this tutorial, you will learn how to work with MySQL NULL values. In addition, you’ll learn some useful functions to deal with the NULL values effectively.

Introduction to MySQL NULL values

In MySQL, a NULL value means unknown. A NULL value is different from zero ( 0 ) or an empty string » .

A NULL value is not equal to anything, even itself. If you compare a NULL value with another NULL value or any other value, the result is NULL because the value of each NULL value is unknown.

Generally, you use the NULL value to indicate that the data is missing, unknown, or not applicable. For example, the phone number of a potential customer may be NULL and can be added later.

When you create a table, you can specify whether a column accepts NULL values or not by using the NOT NULL constraint.

For example, the following statement creates the leads table:

In this leads table, the column id is the primary key column, therefore, it does not accept any NULL value.

The first_name , last_name , and source columns use the NOT NULL constraints, hence, you cannot insert any NULL values into these columns, whereas the email and phone columns accept NULL values.

You can use a NULL value in the INSERT statement to specify that the data is missing. For example, the following statement inserts a row into the leads table. Because the phone number is missing, so a NULL value is used.

Because the default value of the email column is NULL , you can omit the email in the INSERT statement as follows:

MySQL NULL Insert

MySQL SET NULL in UPDATE statement

To set the value of a column to NULL , you use the assignment operator ( = ). For example, to update the phone of David William to NULL , you use the following UPDATE statement:

MySQL ORDER BY with NULL

If you use the ORDER BY clause to sort the result set in the ascending order, MySQL considers NULL values are lower than other values, therefore, it presents the NULL values first.

The following statement sorts the leads by phone number in ascending order.

MySQL NULL ORDER BY

In case you use the ORDER BY DESC , the NULL values appear at last of the result set. See the following example:

MySQL NULL ORDER BY DESC

To test for NULL in a query, you use the IS NULL or IS NOT NULL operator in the WHERE clause.

For example, to get the leads who have not yet provided the phone number, you use the IS NULL operator as follows:

MySQL IS NULL

You can use the IS NOT operator to get all leads who provided the email addresses.

MySQL IS NOT NULL

Even though the NULL is not equal to NULL , two NULL values are equal in the GROUP BY clause.

MySQL NULL with GROUP BY

The query returns only two rows because the rows whose email column is NULL are grouped into one.

MySQL NULL and UNIQUE index

When you use a UNIQUE constraint or UNIQUE index on a column, you can insert multiple NULL values into that column. It is perfectly fine because in this case, MySQL considers NULL values are distinct.

Let’s verify this point by creating a UNIQUE index for the phone column.

Notice that if you use the BDB storage engine, MySQL considers the NULL values are equal therefore you cannot insert multiple NULL values into a column that has a unique constraint.

MySQL NULL functions

MySQL provides several useful functions that handle NULL effectively: IFNULL , COALESCE , and NULLIF .

The IFNULL function accepts two parameters. The IFNULL function returns the first argument if it is not NULL , otherwise, it returns the second argument.

For example, the following statement returns the phone number if it is not NULL otherwise, it returns N/A instead of NULL .

MySQL IFNULL function example

The COALESCE function accepts a list of arguments and returns the first non-NULL argument. For example, you can use the COALESCE function to display the contact information of a lead based on the priority of the information in the following order: phone, email, and N/A.

MySQL COALESCE function example

The NULLIF function accepts two arguments. If the two arguments are equal, the NULLIF function returns NULL . Otherwise, it returns the first argument.

The NULLIF function is useful when you have both NULL and empty string values in a column. For example, by mistake, you insert a following row into the leads table:

The phone is an empty string instead of NULL .

If you want to get the contact information of leads, you end up with an empty phone instead of the email as the following query:

MySQL NULL and Empty String

To fix this, you use the NULLIF function to compare the phone with the empty string, if they are equal, it returns NULL , otherwise, it returns the phone number.

MySQL NULLIF function example

In this tutorial, you have learned how to work with MySQL NULL and how to use some handy functions to handle NULL in queries.

MS SQL Server — Insert NULL values

Roseanne-Read

In this article, we would like to show you how to insert NULL values to the table in MS SQL Server.

Practical example

To show you how to insert NULL values to the table, we will use the following users table:

MS SQL Server - example data used to insert NULL values to the table

MS SQL Server — example data used to insert NULL values to the table

Note:

At the end of this article you can find database preparation SQL queries.

Example

In this example, we will insert rows with NULL values to the users table.

MS SQL Server - insert NULL values to the table - result

MS SQL Server — insert NULL values to the table — result

NULL в SQL: Что это такое и почему его знание необходимо каждому разработчику

NULL — это специальное значение, которое используется в SQL для обозначения отсутствия данных. Оно отличается от пустой строки или нулевого значения, так как NULL означает отсутствие какого-либо значения в ячейке таблицы.

История появления NULL в SQL довольно интересна и длинна. В начале 1970-х годов Д. Камерер (D. Chamberlin) и Р. Бойд (R. Boyce) предложили использовать реляционную модель для полной замены иерархических и сетевых моделей данных, которые были актуальны в то время. Полная замена предполагала возможность хранения значений NULL в таблицах структуры базы данных.

Первоначально, NULL был создан как интегральный элемент реляционной модели данных. Это означало, что NULL мог быть использован в качестве значения для любого типа данных (целого числа, строки и т.д.) или даже целой строки (например, таких значений как «неизвестно» или «нет данных»).

Когда была разработана SQL, NULL был реализован как специальное значение или маркер, который указывает на отсутствие значения в столбце. Таким образом, в SQL NULL означает отсутствие значения или неопределенное значение.

Однако, NULL создал некоторые проблемы при работе с данными в SQL. Например, если вы выполняете операцию на столбце, содержащем NULL значение, результат операции также будет NULL. Это означает, что использование NULL может приводить к нежелательным результатам, таким как непредсказуемое поведение.

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

Рассмотрим несколько SQL операций с NULL:

Как назначить значение NULL в SQL?
Значение NULL можно явно указать при создании таблицы или добавления записей в таблицу. Например, при создании таблицы можно указать, что один из столбцов не обязательно должен иметь значение, используя ключевое слово NULL.

Как проверить NULL в SQL?
Для того чтобы проверить значение NULL в SQL, используется оператор IS NULL. Этот оператор возвращает true, если значение столбца равно NULL.

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

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

ISNULL
Функция ISNULL возвращает первый аргумент, если он не равен NULL, и второй аргумент, если первый аргумент равен NULL. ISNULL наиболее часто используется для замены значений NULL на конкретные значения.

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

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

Почему знание NULL важно для SQL-разработчиков?

Понимание того, что такое NULL и как он работает, важно для SQL-разработчиков, так как они должны убедиться, что данные в таблице корректны и не содержат NULL, если это не предусмотрено требованиями для соответствующего столбца таблицы. Также знание правильной работы с NULL в SQL позволяет избежать неожиданного поведения запросов и операторов, которые могут привести к ошибкам или неверным результатам. Кроме того, понимание того, как обрабатывать значения NULL, может улучшить эффективность запросов, так как правильное использование функций для работы с NULL может сократить количество кода и убрать дублирование.

NULL в базе данных может привести к ошибкам, например:

Сравнение значений. Если в таблице присутствуют значения NULL, то при выполнении операции сравнения, например, WHERE column_name = NULL, результатом будет False. Вместо этого нужно использовать оператор IS NULL.

Вычисления. Если при выполнении арифметических операций включены значения NULL, то результат такой операции тоже будет NULL. Например, 5 + NULL = NULL.

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

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

Агрегирующие функции. При использовании агрегирующих функций в запросах, значения NULL могут не быть учтены в результате.

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

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

Пример неудачного использования NULL

Допустим, у нас есть таблица, в которой хранится информация о заказах в интернет-магазине. Среди полей есть поля, отражающие дату создания заказа (orderdate) и дату его доставки (deliverydate).

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

Однако при анализе статистики продаж на одном из графиков заказы отображались в зависимости от даты доставки. Из-за того, что несколько заказов не имели значения в поле deliverydate, они не отображались на графике вовсе, что привело к искажению реальных данных и ошибочным выводам о продажах на определенные даты.

Эта ошибка привела к тому, что команда интернет-магазина долго работала с неточными данными, и необходимо было потратить много времени на исправление ошибки и калибровку аналитических инструментов. Все эти проблемы могли быть исправлены, если бы разработчики были внимательными и не допустили присвоения значения NULL в поле, которое требует обязательного заполнения.

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

Бонус

Три вопроса с собеседований, где вас проверяют на знание NULL в SQL:

Как проверить, есть ли NULL значение в определенном столбце таблицы в SQL?

Ответ: Необходимо использовать оператор «IS NULL» или «IS NOT NULL». Например, чтобы проверить, есть ли NULL значение в столбце «name» таблицы «users», нужно выполнить следующий запрос: SELECT FROM users WHERE name IS NULL;

Как можно заменить NULL значения на определенное значение в SQL?

Ответ: Для замены NULL значений можно использовать оператор «COALESCE». Например, чтобы заменить NULL значения в столбце «price» таблицы «products» на значение 0, нужно выполнить следующий запрос: SELECT COALESCE(price, 0) FROM products;

Как можно проверить, что два столбца имеют одинаковые значения, включая NULL, в SQL?

Ответ: Для этого нужно использовать оператор «IS NOT DISTINCT FROM». Он сравнивает значения двух столбцов, включая NULL значения. Например, чтобы проверить, что значения столбцов «name» и «address» в таблице «users» совпадают, нужно выполнить следующий запрос: SELECT FROM users WHERE name IS NOT DISTINCT FROM address;

Как добавить null в sql

In this article, we will look into how you can set the column value to Null in SQL.

Firstly, let’s create a table using CREATE TABLE command:

The table would look like this:

To UPDATE Column value, use the below command:

To set column value to NULL use syntax:

Example: For the above table

Output:

Column value can also be set to NULL without specifying the ‘where’ condition.

Example:

Output:

If you have set a constraint that a particular column value can not be NULL, and later try to set it as NULL, then it will generate an error.

Похожие публикации:

  1. Как подключиться к sql через командную строку
  2. Как поменять кодировку в sql shell
  3. Как посмотреть скрипт базы в sql
  4. Как посчитать процент в sql запросе

Как добавить поле в SQL: простая инструкция для начинающих

В этом примере «table_name» — это имя таблицы, к которой вы хотите добавить поле, а «column_name» — это имя добавляемого поля. «data_type» — это тип данных поля. Например, если вы хотите добавить поле «age» типа INTEGER в таблицу «students», вы можете использовать следующий код:

 ALTER TABLE students ADD age INT; 

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

Детальный ответ

Привет студенту CS Highschool! Сегодня я помогу тебе разобраться в том, как добавить поле в SQL. SQL (Structured Query Language) — язык программирования, специально созданный для работы с базами данных. Добавление поля в таблицу в SQL может быть полезно, если ты хочешь расширить структуру своей базы данных. В этой статье я расскажу тебе о нескольких способах добавления поля в SQL с использованием примеров кода.

1. Использование оператора ALTER TABLE

Одним из наиболее распространенных способов добавления поля в SQL является использование оператора ALTER TABLE. Оператор ALTER TABLE позволяет вносить изменения в уже существующую таблицу. Чтобы добавить поле с помощью этого оператора, ты можешь использовать следующий синтаксис:

 ALTER TABLE table_name ADD column_name data_type; 
  • table_name — имя таблицы, в которую ты хочешь добавить поле
  • column_name — имя нового поля
  • data_type — тип данных, который должен храниться в этом поле (например, VARCHAR, INT, DATE и т.д.)

Давай рассмотрим пример. Предположим, у нас есть таблица «users» с уже существующими полями «id» и «name», и мы хотим добавить новое поле «age» с типом данных INTEGER:

 ALTER TABLE users ADD age INT; 

После выполнения этого запроса, таблица «users» будет содержать новое поле «age».

2. Использование оператора CREATE TABLE

Еще одним способом добавления поля в SQL является использование оператора CREATE TABLE с помощью временной таблицы. Этот способ может быть полезен, если ты хочешь добавить несколько новых полей одновременно. Давай рассмотрим пример:

 CREATE TABLE new_table AS SELECT column1, column2, column3, new_column FROM old_table; 
  • new_table — имя временной таблицы, которую мы создаем
  • old_table — имя существующей таблицы, из которой мы выбираем данные
  • new_column — новое поле, которое мы хотим добавить

В этом примере мы создаем новую таблицу «new_table», в которую копируем данные из существующей таблицы «old_table», а также добавляем новое поле «new_column».

3. Использование инструкции INSERT INTO

Третий способ добавления поля в SQL — использование инструкции INSERT INTO. Этот способ может быть полезен, если ты хочешь добавить новое поле в существующую строку таблицы. Вот как ты можешь сделать это:

 INSERT INTO table_name (column1, column2, new_column) VALUES (value1, value2, new_value); 
  • table_name — имя таблицы, в которую ты хочешь добавить поле
  • column1, column2 — существующие поля в таблице
  • new_column — новое поле, которое мы хотим добавить
  • value1, value2 — значения полей column1 и column2
  • new_value — значение для нового поля new_column

Например, у нас есть таблица «users» с полями «id», «name» и «email». Мы хотим добавить новое поле «age» в строку с идентификатором 1. Мы будем использовать следующий запрос:

 INSERT INTO users (id, name, age, email) VALUES (1, 'John', 25, 'john@example.com'); 

После выполнения этого запроса, поле «age» будет добавлено в строку с идентификатором 1 в таблице «users».

Заключение

В этой статье мы рассмотрели несколько способов добавления поля в SQL. Мы использовали оператор ALTER TABLE для добавления поля в уже существующую таблицу, оператор CREATE TABLE для создания временной таблицы с новыми полями и инструкцию INSERT INTO для добавления нового поля в существующую строку таблицы. Теперь ты должен легко справиться с добавлением полей в SQL. Удачи!

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

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