Инструкция insert into

Which Method is Best?

With a variety of methods to insert data into SQL Server available, the first question we will ask is which syntax should we use? The answer is going to depend on your use-case and specifically what is most important to a given application. To summarize our work so far:

Use an INSERT with an explicit column list for applications where column lists, inputs, and outputs do not change often. These are scenarios where change typically consist of column additions or alterations resulting from software releases. The column lists also add a layer of protection against logical errors if a column is added, removed, or altered without the INSERT statement also being updated. An error being thrown is a far better outcome than data quietly being handled incorrectly. This syntax is generally considered a best practice as it provides both documentation and protection against inadvertent mistakes should the schema change in the future.

An INSERT with no column list carves out a niche in scenarios where the columns are unknown or frequently changing. This might be useful in ETL, reporting, or scenarios involving transient data when the data is unstructured. Despite that possible application, I would lean towards using SELECT INTO for these applications as they provide a bit more safety against inadvertent mistakes with your data. An alternative to cover the need to insert into a pre-existing table would be to use SELECT INTO to create a temporary data structure and then insert from that temporary data into the permanent table using a formal column list.

SELECT INTO provides us the ability to quickly create a new table and dump data into it with very little setup or coding. For small data sets or those that are going to be scanned in their entirety, this is a great way to move data with minimal TSQL and maintenance. The primary downside is the inability to include indexes or constraints on the table until after it is created. This syntax must create a new table, which lends itself towards using temporary tables as a target to insert data to.

OUTPUT INSERTED allows us to return data from before, after, or before and after a DML statement. This is a hugely useful syntax and one that has no intrinsic downsides. It is a great alternative to iteration, functions, or triggers that may attempt to accomplish the same tasks. The syntax is relatively simple and can be applied to any data elements prior to or after a given change. You may even include data that is not directly affected by a DML statement, but was joined for use in the query!

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

Можно использовать инструкцию MySQL INSERT SELECT для копирования строк из одной таблицы и их вставки в другую.

Использование этого оператора аналогично использованию INSERT INTO. Разница в том, что оператор SELECT применяется для выборки данных из другой таблицы. Ниже приведены различные способы использования INSERT INTO SELECT:

Вставка всех столбцов таблицы: можно скопировать все данные таблицы и вставить их в другую таблицу.

Синтаксис:

INSERT INTO первая_таблица SELECT * FROM вторая_таблица;

первая_таблица: имя первой таблицы.
вторая_таблица: имя второй таблицы.

Мы использовали инструкцию SELECT для копирования данных из одной таблицы и инструкцию INSERT INTO для их вставки в другую.

Вставка отдельных столбцов таблицы. Можно скопировать только те столбцы таблицы, которые необходимо вставить в другую таблицу.

Синтаксис:

INSERT INTO первая_таблица(имена_столбцов1) SELECT имена_столбцов2 FROM вторая_таблица;

первая_таблица: имя первой таблицы.
вторая_таблица: имя второй таблицы.
имена_столбцов1: имена столбцов, разделенные запятой(,) для таблицы 1.
имена_столбцов2: имена столбцов, разделенные запятой(,) для таблицы 2.

Мы использовали инструкцию SELECT для копирования данных только из выбранных столбцов второй таблицы и инструкцию  INSERT INTO MySQL SELECT для их вставки в первую таблицу.

Копирование определенных строк из таблицы. Можно скопировать определенные строки из таблицы для последующей вставки в другую таблицу с помощью условия WHERE с оператором SELECT. В этом случае нужно использовать соответствующее условие в WHERE.

Синтаксис:

INSERT INTO таблица1 SELECT * FROM таблица2 WHERE условие; 

таблица1: имя первой таблицы.
таблица2: имя второй таблицы.
условие: условие для выбора строк.

Таблица 2: LateralStudent

ROLL_NO NAME ADDRESS PHONE Age
7 SOUVIK DUMDUM 9876543210 18
8 NIRAJ NOIDA 9786543210 19
9 SOMESH ROHTAK 9687543210 20

Запросы:

Способ 1 (вставка всех строк и столбцов):

INSERT INTO Student SELECT * FROM LateralStudent;

Результат:

Этот запрос вставит все данные таблицы LateralStudent в таблицу Student. После применения INSERT INTO SQL SELECT таблица Student будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK DUMDUM 9876543210 18
8 NIRAJ NOIDA 9786543210 19
9 SOMESH ROHTAK 9687543210 20

Способ 2 (вставка отдельных столбцов):

INSERT INTO Student(ROLL_NO,NAME,Age) SELECT ROLL_NO, NAME, Age FROM LateralStudent;

Результат:

Этот запрос вставит данные из столбцов ROLL_NO, NAME и Age таблицы LateralStudent в таблицу Student. Для остальных столбцов таблицы Student будет задано значение null. После применения SQL INSERT SELECT таблица будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK Null null 18
8 NIRAJ Null null 19
9 SOMESH Null null 20

Выбор определенных строк для вставки:

INSERT INTO Student SELECT * FROM LateralStudent WHERE Age = 18;

Результат:

Этот запрос выберет только первую строку из таблицы LateralStudent для вставки в таблицу Student. После применения INSERT SELECT таблица будет выглядеть следующим образом:

ROLL_NO NAME ADDRESS PHONE Age
1 Ram Delhi 9455123451 18
2 RAMESH GURGAON 9562431543 18
3 SUJIT ROHTAK 9156253131 20
4 SURESH Delhi 9156768971 18
3 SUJIT ROHTAK 9156253131 20
2 RAMESH GURGAON 9562431543 18
7 SOUVIK DUMDUM 9876543210 18

INSERT INTO SELECT

The command copies data
from one table and inserts it into another table.

The following SQL copies «Suppliers» into «Customers» (the columns
that are not filled with data, will contain NULL):

Example

INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM Suppliers;

The following SQL copies «Suppliers» into «Customers» (fill all
columns):

Example

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode,
Country)SELECT SupplierName, ContactName, Address, City, PostalCode,
Country FROM Suppliers;

The following SQL copies only the German suppliers into «Customers»:

Example

INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM SuppliersWHERE Country=’Germany’;

Добавление данных. Команда Insert

Последнее обновление: 13.07.2017

Для добавления данных применяется команда INSERT, которая имеет следующий формальный синтаксис:

INSERT  имя_таблицы  VALUES (значение1, значение2, ... значениеN)

Вначале идет выражение INSERT INTO, затем в скобках можно указать список столбцов через запятую, в которые надо добавлять данные, и
в конце после слова VALUES скобках перечисляют добавляемые для столбцов значения.

Например, пусть ранее была создана следующая база данных:

CREATE DATABASE productsdb;
GO
USE productsdb;
CREATE TABLE Products
(
	Id INT IDENTITY PRIMARY KEY,
	ProductName NVARCHAR(30) NOT NULL,
	Manufacturer NVARCHAR(20) NOT NULL,
	ProductCount INT DEFAULT 0,
	Price MONEY NOT NULL
)

Добавим в нее одну строку с помощью команды INSERT:

INSERT Products VALUES ('iPhone 7', 'Apple', 5, 52000)

После удачного выполнения в SQL Server Management Studio в поле сообщений должно появиться сообщение «1 row(s) affected»:

Стоит учитывать, что значения для столбцов в скобках после ключевого слова VALUES передаются по порядку их объявления. Например, в выражении
CREATE TABLE выше можно увидеть, что первым столбцом идет Id. Но так как для него задан атрибут IDENTITY, то значение этого столбца автоматически генерируется, и его можно не указывать.
Второй столбец представляет ProductName, поэтому первое значение — строка «iPhone 7» будет передано именно этому столбцу.
Второе значение — строка «Apple» будет передана третьему столбцу Manufacturer и так далее. То есть значения передаются столбцам
следующим образом:

  • ProductName: ‘iPhone 7’

  • Manufacturer: ‘Apple’

  • ProductCount: 5

  • Price: 52000

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

INSERT INTO Products (ProductName, Price, Manufacturer) 
VALUES ('iPhone 6S', 41000, 'Apple')

Здесь значение указывается только для трех столбцов. Причем теперь значения передаются в порядке следования столбцов:

  • ProductName: ‘iPhone 6S’

  • Manufacturer: ‘Apple’

  • Price: 41000

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

Также мы можем добавить сразу несколько строк:

INSERT INTO Products 
VALUES 
('iPhone 6', 'Apple', 3, 36000),
('Galaxy S8', 'Samsung', 2, 46000),
('Galaxy S8 Plus', 'Samsung', 1, 56000)

В данном случае в таблицу будут добавлены три строки.

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

INSERT INTO Products (ProductName, Manufacturer, ProductCount, Price)
VALUES ('Mi6', 'Xiaomi', DEFAULT, 28000)

В данном случае для столбца ProductCount будет использовано значение по умолчанию (если оно установлено, если его нет — то NULL).

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

INSERT INTO Products
DEFAULT VALUES

Но если брать таблицу Products, то подобная команда завершится с ошибкой, так как несколько полей не имеют атрибута DEFAULT и при этом не допускают значение NULL.

НазадВперед

Множественный UPDATE

Учебный тренинг. SQL от новичка до профессионала. Бесплатные авторские видеокурсы SQL, PLSQL, JAVAЧалышев Максим Михайловичизучаем SQL группа в контакте — присоединяйтесьИтак, небольшая заметка по операторы UPDATEпредположим что нам необходимо заменить значения в таблице 1 , данными из таблицы 2можно конечно написать что то вроде

update t1 set t1.f1=select t2.f1 from t2 where t2.key1 = t1.key

но у нас есть более легкий способ произвести подобную операцию

UPDATE
(
SELECT
       t.c1,
       t.c2,
       s.c1 AS c1_new,
       s.c2 AS c2_new
 
FROM table1 t
INNER JOIN table2 s ON s.key=t.key
)
tt
SET tt.c1=tt.c1_new, tt.c2=tt.c2_new

Где table1, table2 этоТо есть на основании данных из одной таблицы мы обновляем данные в другой таблице, важно наличие первичного ключа в каждой из представленных таблицприведем пример демонстрирующий работу UPDATE с несколькими таблицами

create table PHONES1
(
  PHONENUM VARCHAR2(48) not null primary key,
  NAME VARCHAR2(48)
);

create table PHONES
(
  PHONENUM VARCHAR2(48) not null primary key,
  NAME VARCHAR2(48)
);

заполним данными и выполним UPDATE

INSERT INTO PHONES1(PHONENUM, name) values ('495 1211133','Алексеев1');
INSERT INTO PHONES1(PHONENUM, name) values ('499 3311133','Михайлов1');
INSERT INTO PHONES1(PHONENUM, name) values ('917 12122sd3','Коробочкин1');
INSERT INTO PHONES1(PHONENUM, name) values ('499 33111133','Костин1');

INSERT INTO PHONES(PHONENUM, name) values ('495 1211133','Алексеев');
INSERT INTO PHONES(PHONENUM, name) values ('499 3311133','Михайлов');
INSERT INTO PHONES(PHONENUM, name) values ('917 12122sd3','Коробочкин');
INSERT INTO PHONES(PHONENUM, name) values ('499 33111133','Костин');
INSERT INTO PHONES(phonenum, name) values ('214 331das1133','Докучаев');

UPDATE (SELECT   t.phonenum AS phonenum1,       t.phonenum phonenum2,        s.name AS name1, t.name AS name_new FROM phones1 t
INNER JOIN phones s ON s.phonenum=t.phonenum )  Tt SET tt.name1=tt.name_new

результат — обновление данных в phones из таблицы phones1

Insert Data into SQL Server Without an Explicit Column List

This leads us into the alternative way to insert data into an existing table, which is to do so without a column list. An insert of this form will look like this:

1
2
3
4
5
6
7
8
9

INSERTINTOdbo.account

SELECT

‘The Pokemon Company’,

‘4/23/1998’,

‘Roppongi Hills Mori Tower 8F, Tokyo, Japan’,

‘LIVE’,

GETUTCDATE(),

‘Very valuable.  They make all the Pokemon!’,

1;

This statement executes successfully, despite no column list being provided. When SQL Server binds this query to its underlying objects, it will pull the column list in order and apply it to the data being inserted. If everything matches up, then we’re good to go, otherwise we will receive an error similar to the two we saw earlier that indicate column lists that do not match up.

The upside (if we wish to call it an upside) of this approach is that it is fast and requires less upkeep as there’s no need to write and maintain a list of columns with the insert. The downside is that if you mismatch columns, you may get a different sort of error message. Consider the following query:

1
2
3
4
5
6
7
8

INSERTINTOdbo.account

SELECT

‘The Pokemon Company’,

‘4/23/1998’,

‘Roppongi Hills Mori Tower 8F, Tokyo, Japan’,

GETUTCDATE(),

‘Very valuable.  They make all the Pokemon!’,

;

When executed, we get a new error message:

In this scenario, we left out a column, but since this table includes NULLable columns, SQL Server tried to match up the table’s columns anyway using the data we provided, but was unable to make a meaningful match.

Because of the potential for confusing errors and the inability to easily match up columns to data, inserting into a table without providing a column list is not seen as a best practice and should be avoided whenever possible. I would recommend including a column list in all INSERT statements unless you happen to have a very unique use-case in which the convenience of the simpler syntax outweighs the risk of future code breaking if the table’s schema changes.

In addition, the column list provides clear documentation to the user as to what is being inserted and which columns the data will be going into. We can improve upon this further if we wish by adding aliases to all inserted columns:

1
2
3
4
5
6
7
8
9
10

INSERTINTOdbo.account

(account_name,account_start_date,account_address,account_type,account_create_timestamp,account_notes,is_active)

SELECT

‘Microsoft’ASaccount_name,

‘4/4/1975’ASaccount_start_date,

‘One Microsoft Way in Redmond, Washington’ASaccount_address,

‘LIVE’ASaccount_type,

GETUTCDATE()ASaccount_start_date,

‘They make SQL Server.  Thanks!’ASaccount_notes,

1ASis_active;

Adding column aliases may seem like overkill, but when working with longer INSERT statements, dynamic SQL, or complex queries, the added documentation can greatly aid in writing, modifying, and troubleshooting those queries. You can also test your insert statement by highlighting the SELECT list only and executing it, which returns values along with the handy column headers:

Alternatively, you can provide that documentation in comments:

1
2
3
4
5
6
7
8
9
10

INSERTINTOdbo.account

(account_name,account_start_date,account_address,account_type,account_start_date,account_notes,is_active)

SELECT

‘Microsoft’,— account_name

‘4/4/1975’,— account_start_date

‘One Microsoft Way in Redmond, Washington’,— account_address

‘LIVE’,— account_type

GETUTCDATE(),— account_start_date

‘They make SQL Server.  Thanks!’,— account_notes

1;— is_active

This can be a nice way to document without adjusting the query. The only downside is that you lose the handy column names that were demonstrated above with the test SELECT. Both are worth the extra 30 seconds to include in your code as they will save far more time in the future when the time comes to modify or troubleshoot that code.

INSERT INTO Example

The following SQL statement inserts a new record in the «Customers» table:

Example

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
VALUES (‘Cardinal’, ‘Tom B. Erichsen’, ‘Skagen 21’, ‘Stavanger’, ‘4006’, ‘Norway’);

The selection from the «Customers» table will now look like this:

CustomerID CustomerName ContactName Address City PostalCode Country
89 White Clover Markets Karl Jablonski 305 — 14th Ave. S. Suite 3B Seattle 98128 USA
90 Wilman Kala Matti Karttunen Keskuskatu 45 Helsinki 21240 Finland
91 Wolski Zbyszek ul. Filtrowa 68 Walla 01-012 Poland
92 Cardinal Tom B. Erichsen Skagen 21 Stavanger 4006 Norway

Did you notice that we did not insert any number into the CustomerID
field?The CustomerID column is
an auto-increment field and will be
generated automatically when a new record is inserted into the table.

Syntax

In its simplest form, the syntax for the INSERT statement when inserting a single record using the VALUES keyword in SQL Server (Transact-SQL) is:

INSERT INTO table
(column1, column2, ... )
VALUES
(expression1, expression2, ... ),
(expression1, expression2, ... ),
...;

However, the full syntax for the INSERT statement when inserting a single record using the VALUES keyword in SQL Server (Transact-SQL) is:

INSERT INTO table
(column1, column2, ... )
VALUES
( DEFAULT | NULL | expression1, 
  DEFAULT | NULL | expression2, 
  ...
);

Or…

The syntax for the SQL Server INSERT statement when inserting a single record using the DEFAULT VALUES keyword is:

INSERT INTO table
(column1, column2, ... )
DEFAULT VALUES;

Or…

In its simplest form, the syntax for the SQL Server INSERT statement when inserting multiple records using a sub-select is:

INSERT INTO table
(column1, column2, ... )
SELECT expression1, expression2, ...
FROM source_table
;

However, the full syntax for the SQL Server INSERT statement when inserting multiple records using a sub-select is:

INSERT  ]
INTO table
(column1, column2, ... )
SELECT expression1, expression2, ...
FROM source_table
;

Insert Data into SQL Server Using an Explicit Column List

Let’s begin by diving straight into some of the simplest of syntaxes in T-SQL: The INSERT statement. The most common way to insert rows into a table is by doing so with an INSERT statement where we explicitly cite the entire column list prior to providing the values:

1
2
3
4
5
6
7
8
9
10

INSERTINTOdbo.account

(account_name,account_start_date,account_address,account_type,account_create_timestamp,account_notes,is_active)

VALUES

(‘Ed»s Account’,

‘5/1/2019’,

‘Ed»s Address’,

‘TEST’,

GETUTCDATE(),

‘This is a test account to model this data.’,

);

In this example, we provide a complete column list and use the VALUES syntax to list out scalar values to insert into the table. If desired, we can insert multiple rows via this syntax, separating each row by a comma.

We also have the option of omitting columns from the column and SELECT lists. This can be used for columns that allow NULL (and we want to be left NULL), or for columns that have default constraints defined on them (and we want the column to accept the default value). The following example shows an account insertion where we omit the account_notes column:

1
2
3
4
5
6
7
8
9

INSERTINTOdbo.account

(account_name,account_start_date,account_address,account_type,account_create_timestamp,is_active)

VALUES

(‘Initech’,

‘2/19/1999’,

‘4120 Freidrich Ln.’,

‘LIVE’,

GETUTCDATE(),

1);

After the two above insertions, we can view the resulting data and note that the results are what we expect:

SQL Server allowed us to omit the account_notes column and in doing so assigned NULL in its place. Let’s add a default constraint to this column:

1 ALTERTABLEdbo.accountADDCONSTRAINTDF_account_account_notesDEFAULT(‘NONE PROVIDED’)FORaccount_notes;

With a default constraint on the column, we may test another INSERT where we intentionally leave out the account_notes column:

1
2
3
4
5
6
7
8
9

INSERTINTOdbo.account

(account_name,account_start_date,account_address,account_type,account_create_timestamp,is_active)

SELECT

‘Dinosaur Corp’,

‘1/1/2003’,

‘The Triassic Time Period’,

‘DEMO’,

GETUTCDATE(),

1;

The results show us how the new row looks in our table:

We can see that the default value from the constraint was applied to account_notes, as expected. Creating a default constraint can be useful for ensuring that a column can be made NOT NULL and always be assigned a value. It is also useful when we wish to have a column that typically is not assigned a value, but requires one for an application or reporting purpose. A default constraint should never be used to generate placeholder, fake, or obfuscated data. For example, -1 is a poor choice for an integer column and 1/1/1900 is a lousy choice for a date column as each provides confusing meaning that is not intuitive to a developer or someone consuming this data.

The primary benefit of inserting data with an explicit column list are that you document exactly what columns are being populated, and what data is being put into each column. If a column is left off the list, then it will be made NULL. If a NOT NULL column with no default constraint is left off of the list, an error will be thrown, similar to this:

Similarly, if you accidentally leave off a column from the column list, you’ll get this error:

As a result, the explicitly provided column list makes it hard to accidentally leave columns out.

This syntax has a downside, though, and that is maintainability in scenarios where table schema changes often and there is a desire to always SELECT *. If you are dumping data to an output table and do not care about column order, typing, or quantity, then having to always adjust the column list to match the SELECT details may be a hassle and not worth the effort.

SQL INSERT

Команда INSERT добавляет строки в таблицу или представление основной таблицы.

Синтаксис команды Sql INSERT

Синтаксис команды Insert

Основные ключевые слова и параметры команды INSERT

  • schema — идентификатор полномочий, обычно совпадающий с именем некоторого пользователя
  • table view — имя таблицы, в которую строки должны быть вставлены; если указано представление, то строки вставляются в основную таблицу представления
  • subquery_1 — подзапрос, который сервер обрабатывает тем же самым способом как представление
  • column — столбец таблицы или представления, в который для каждой вставленной строки вводится значение из фразы VALUES или подзапроса; если один из столбцов таблицы опускается из этого списка, значением столбца для вставленной строки является значение по умолчанию столбца, определенное при создании таблицы. Если полностью опускается список столбца, предложение VALUES или запрос должен определить значения для всех столбцов в таблице
  • VALUES — определяет строку значений, которые будут вставлены в таблицу или представление; значение должно быть определено в предложении VALUES для каждого столбца в списке столбцов
  • subquery_2 — подзапрос, который возвращает строки, вставляемые в таблицу; выборочный список этого подзапроса должен иметь такое же количество столбцов, как в списке столбцов утверждения INSERT

Утверждение INSERT с фразой VALUES добавляет одиночную строку к таблице. Эта строка содержит значения, определенные фразой VALUES.
Утверждение INSERT с подзапросом вместо фразы VALUES добавляет к таблице все строки, возвращенные подзапросом. Сервер обрабатывает подзапрос и вставляет каждую возвращенную строку в таблицу. Если подзапрос не выбирает никакие строки, сервер не вставляет никакие строки в таблицу.Подзапрос может обратиться к любой таблице или представлению, включая целевую таблицу утверждения INSERT. Сервер назначает значения полям в новых строках, основанных на внутренней позиции столбцов в таблице и порядке значений фразы VALUES или в списке выбора запроса. Если какие-либо столбцы пропущены в списке столбцов, сервер назначает им значения по умолчанию, определенные при создании таблицы. Если любой из этих столбцов имеет NOT NULL ограничение то сервер возвращает ошибку, указывающую, что ограничение было нарушено и отменяет утверждение INSERT.
При выдаче утверждения INSERT включается любой INSERT — триггер, определенный на таблице.

INSERT INTO

INSERT INTO Пример 1

INSERT INTO Пример 2
Нижеприведенная команда копирует данные сотрудников фирмы, комисионные которых превышают 25% от дохода в таблицу bonus:

INSERT INTO Пример 3
Если нужно вставить NULL-значение, необходимо указать его как обычное значение следующим образом:

INSERT INTO Пример 4
Команду INSERT можно применить для того, чтобы извлечь значения из одной таблицы и разместить их в другой, воспользовавшись для этого запросом. Для этого достаточно заменить предложение VALUES на соответствующий запрос:

Insert Data SQL Server via Stored Procedure or Dynamic SQL

Stored procedures are often used to return data to applications, reports, or additional TSQL scripts for processing. The results of any stored procedure can be inserted directly into a predefined table like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

CREATETABLE#temp

(SPIDVARCHAR(100),

STATUSVARCHAR(100),

LOGINVARCHAR(100),

hostnameVARCHAR(100),

blkbyVARCHAR(100),

dbnameVARCHAR(100),

commandVARCHAR(100),

cputimeVARCHAR(100),

diskitVARCHAR(100),

latbatchVARCHAR(100),

programnameVARCHAR(100),

spid2VARCHAR(100),

requestidVARCHAR(100))

INSERTINTO#temp

EXECsp_who2;

SELECT*FROM#temp

WHEREdbname=’AdventureWorks2016CTP3′;

DROPTABLE#temp;

This monitoring script will execute sp_who2 to return a list of current processes in a given database. By default, this stored procedure returns all sessions, though parameters can be supplied to filter by login or session ID. To filter by database, though, would otherwise require returning all data and then manually removing the irrelevant rows. By creating a temporary table up front and inserting the results directly into it, we are then freed up to filter the result set by whatever criteria we wish. Any table may be used for this purpose, including permanent tables, as well as table variables.

The same syntax can be used to insert the results of dynamic SQL into a table, like this:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

DECLARE@sql_commandNVARCHAR(MAX);

DECLARE@account_typeSYSNAME=’LIVE’;

SELECT@sql_command=’

  SELECT
    account_id
  FROM dbo.account

  WHERE account_type = »’+@account_type+»’;’;

CREATETABLE#id_list

(account_idINTNOTNULLPRIMARYKEYCLUSTERED);

INSERTINTO#id_list

(account_id)

EXECsp_executesql@sql_command;

SELECT*FROM#id_list;

DROPTABLE#id_list;

The end result of this code is that we use sp_executesql to execute dynamic SQL, placing the results directly into a temporary table.

In both of these scenarios, we were able to execute procedural TSQL and insert the results directly into an existing table. SELECT INTO is not supported with this syntax, but everything else we have discussed so far does work with this convention.

Get Inserted ID

For tables with an auto increment id field, you can get the id of the row you
just inserted by asking the result object.

Note: To be able to get the inserted id, only one row can be inserted.

Example

Insert a record in the «customers» table, and return the ID:

var mysql = require(‘mysql’);var con = mysql.createConnection({ 
host: «localhost»,  user: «yourusername»,  password: «yourpassword»,
  database: «mydb»
});con.connect(function(err) {  if (err) throw err;  var sql = «INSERT INTO customers (name, address)
VALUES (‘Michelle’, ‘Blue Village 1’)»; 
con.query(sql, function (err, result) {    if (err) throw err;    console.log(«1 record inserted,
ID: » + result.insertId);  });});

Save the code above in a file called «demo_db_insert_id.js», and run the file:

Run «demo_db_insert_id.js»

C:\Users\Your Name>node demo_db_insert_id.js

Which will give you something like this in return:

1 record inserted, ID: 15

❮ Previous
Next ❯

Insert Into Table

To fill a table in MySQL, use the «INSERT INTO» statement.

Example

Insert a record in the «customers» table:

var mysql = require(‘mysql’);var con = mysql.createConnection({ 
host: «localhost»,  user: «yourusername»,  password: «yourpassword»,
  database: «mydb»
});con.connect(function(err) {  if (err) throw err;  console.log(«Connected!»);  var sql = «INSERT INTO customers (name, address)
VALUES (‘Company Inc’, ‘Highway 37’)»; 
con.query(sql, function (err, result) {    if (err) throw err;    console.log(«1 record inserted»);  });});

Save the code above in a file called «demo_db_insert.js», and run the file:

Run «demo_db_insert.js»

C:\Users\Your Name>node demo_db_insert.js

Which will give you this result:

Connected!1 record inserted

Часто задаваемые вопросы

Вопрос: Я создал базу данных клиентов. Я знаю, что вы используете Oracle оператор INSERT для вставки информации в базу данных, но как я могу убедиться, что не ввел ту же информацию о клиенте снова?

Ответ: Вы можете убедиться, что не вставить повторяющуюся информацию, используя условие EXISTS.

Например, если у вас была таблица с названием clients с первичным ключом client_id, вы можете использовать следующий INSERT:

Oracle PL/SQL

INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, ‘advertising’
FROM suppliers
WHERE NOT EXISTS (SELECT *
FROM clients
WHERE clients.client_id = suppliers.supplier_id);

1
2
3
4
5
6
7

INSERTINTOclients
(client_id,client_name,client_type)

SELECTsupplier_id,supplier_name,’advertising’

FROMsuppliers

WHERENOTEXISTS(SELECT*

FROMclients

WHEREclients.client_id=suppliers.supplier_id);

Это Oracle предложение INSERT вставляет несколько записей с подзапросом.

Если вы хотите вставить одну запись, вы можете использовать следующее Oracle предложение INSERT:

Oracle PL/SQL

INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345,
‘IBM’,
‘advertising’
FROM dual
WHERE NOT EXISTS (SELECT *
FROM clients
WHERE clients.client_id = 10345);

1
2
3
4
5
6
7
8
9

INSERTINTOclients
(client_id,client_name,client_type)

SELECT10345,

‘IBM’,

‘advertising’

FROMdual

WHERENOTEXISTS(SELECT*

FROMclients

WHEREclients.client_id=10345);

Использование таблицы dual позволяет ввести значения в операторе select, даже если значения не хранятся в настоящее время в таблице.

Вопрос: Как я могу вставить несколько строк явных данных в одном предложении INSERT в Oracle?

Ответ: Ниже приведен пример того, как можно вставить 3 строки в таблицу suppliers в Oracle, используя оператор INSERT:

Oracle PL/SQL

INSERT ALL
INTO suppliers (supplier_id, supplier_name) VALUES (1000, ‘IBM’)
INTO suppliers (supplier_id, supplier_name) VALUES (2000, ‘Microsoft’)
INTO suppliers (supplier_id, supplier_name) VALUES (3000, ‘Google’)
SELECT * FROM dual;

1
2
3
4
5

INSERTALL

INTOsuppliers(supplier_id,supplier_name)VALUES(1000,’IBM’)

INTOsuppliers(supplier_id,supplier_name)VALUES(2000,’Microsoft’)

INTOsuppliers(supplier_id,supplier_name)VALUES(3000,’Google’)

SELECT*FROMdual;

Demo Database

In this tutorial we will use the well-known Northwind sample database.

Below is a selection from the «Customers» table:

CustomerID CustomerName ContactName Address City PostalCode Country
1 Alfreds Futterkiste Maria Anders Obere Str. 57 Berlin 12209 Germany
2 Ana Trujillo Emparedados y helados Ana Trujillo Avda. de la Constitución 2222 México D.F. 05021 Mexico
3 Antonio Moreno Taquería Antonio Moreno Mataderos 2312 México D.F. 05023 Mexico

And a selection from the «Suppliers» table:

SupplierID SupplierName ContactName Address City Postal Code Country
1 Exotic Liquid Charlotte Cooper 49 Gilbert St. Londona EC1 4SD UK
2 New Orleans Cajun Delights Shelley Burke P.O. Box 78934 New Orleans 70117 USA
3 Grandma Kelly’s Homestead Regina Murphy 707 Oxford Rd. Ann Arbor 48104 USA

MySQL INSERT INTO SELECT Examples

The following SQL statement copies «Suppliers» into «Customers» (the columns
that are not filled with data, will contain NULL):

Example

INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM Suppliers;

The following SQL statement copies «Suppliers» into «Customers» (fill all
columns):

Example

INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode,
Country)SELECT SupplierName, ContactName, Address, City, PostalCode,
Country FROM Suppliers;

The following SQL statement copies only the German suppliers into «Customers»:

Example

INSERT INTO Customers (CustomerName,
City, Country)
SELECT SupplierName, City, Country FROM SuppliersWHERE Country=’Germany’;

❮ Previous
Next ❯

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

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

Adblock
detector