저는 수년 전에 이것을 해왔다는 것을 알고 있습니다. 그러나 구문을 기억할 수는 없으며 "벌크 수입"에 대한 도움말 문서와 기사를 끌어 올 수 있기 때문에 어디서나 찾을 수는 없습니다.
여기 내가하고 싶은,하지만 구문이 정확하지 않습니다 ... 제발,이 일을 전에 누군가가 도와주세요 :)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
나는 이것이닫기올바른 구문으로 거기에 "BULK"라는 단어가 필요할 수도 있습니다. 기억이 나지 않습니다. 어떤 생각?
SQL Server 2005 데이터베이스에이 기능이 필요합니다. 나는이 코드를 사용해 보았다.
DECLARE @blah TABLE
(
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL
)
INSERT INTO @blah (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
SELECT * FROM @blah
나는지고있다.Incorrect syntax near the keyword 'VALUES'.
INSERT INTO dbo.MyTable (ID, Name)
SELECT 123, 'Timmy'
UNION ALL
SELECT 124, 'Jonny'
UNION ALL
SELECT 125, 'Sally'
SQL Server 2008의 경우 하나의 VALUES 절에서이를 수행 할 수 있습니다.정확하게귀하의 질문에 성명에 따라 (당신은 각 값 진술을 구분하는 쉼표를 추가해야합니다) ...
INSERT table (columnlist)
- gbnselect
열과 행이있는 집합을 만들면 디자인에 따라이 행을 만들 수 있습니다.insert
동일한 양의 컬럼을 가진 다른 테이블로 옮겨진다. 리터럴과 값을 혼합하여 사용할 수도 있습니다. 예를 들어insert
와select 'A', ID from ATable
& # 39; 첫 번째 열에서 매번 두 번째 열에있는 ATable의 해당 행의 ID 열 값. - MarioDS
구문은 SQL Server 2008에서 거의 작동합니다 (하지만 SQL Server 2005에서는 작동하지 않음).1) :
CREATE TABLE MyTable (id int, name char(10));
INSERT INTO MyTable (id, name) VALUES (1, 'Bob'), (2, 'Peter'), (3, 'Joe');
SELECT * FROM MyTable;
id | name
---+---------
1 | Bob
2 | Peter
3 | Joe
1질문에 대한 답변을 얻었을 때이 질문이 SQL Server 2005를 언급하고 있음을 분명히 알 수 없었습니다.이 대답은 아직 적합하다고 생각하므로 여기에서 대답을 남깁니다.
데이터가 이미 데이터베이스에있는 경우 다음을 수행 할 수 있습니다.
INSERT INTO MyTable(ID, Name)
SELECT ID, NAME FROM OtherTable
데이터를 하드 코딩해야하는 경우 SQL 2008 이상 버전을 사용하면 다음 작업을 수행 할 수 있습니다.
INSERT INTO MyTable (Name, ID)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)
사용INSERT INTO ... VALUES
에서와 같은 구문다니엘 바 살로대답
하나의 귀찮은 제한이 있습니다.
에서MSDN
VALUES 목록에 행을 직접 삽입하여 생성 할 수있는 최대 행 수는 다음과 같습니다.1000
이 제한을 생략하는 가장 쉬운 방법은 다음과 같은 파생 테이블을 사용하는 것입니다.
INSERT INTO dbo.Mytable(ID, Name)
SELECT ID, Name
FROM (
VALUES (1, 'a'),
(2, 'b'),
--...
-- more than 1000 rows
)sub (ID, Name);
C. Specifying multiple values as a derived table in a FROM clause
- Lukasz Szozda
당신은 이것을 할 수 있습니다 (추악하지만 작동합니다) :
INSERT INTO dbo.MyTable (ID, Name)
select * from
(
select 123, 'Timmy'
union all
select 124, 'Jonny'
union all
select 125, 'Sally'
...
) x
당신은 노동 조합을 사용할 수 있습니다 :
INSERT INTO dbo.MyTable (ID, Name)
SELECT ID, Name FROM (
SELECT 123, 'Timmy'
UNION ALL
SELECT 124, 'Jonny'
UNION ALL
SELECT 125, 'Sally'
) AS X (ID, Name)
SQL Server 2008에서는 정상적으로 보입니다. SS2005 & amp; 이전에 VALUES 문을 반복해야합니다.
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
편집하다::내 잘못이야. SS2005의 각 행에 대해 'INSERT INTO'를 반복해야합니다.
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy')
INSERT INTO dbo.MyTable (ID, Name)
VALUES (124, 'Jonny')
INSERT INTO dbo.MyTable (ID, Name)
VALUES (125, 'Sally')
SQL Server에서 XML을 사용하여 여러 행을 삽입하는 것이 더 쉬울 것입니다. 그렇지 않으면 매우 지루합니다.
코드 설명과 함께 전체 기사보기http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
예제를 보려면 다음 코드를 SQL Server에 복사하십시오.
declare @test nvarchar(max)
set @test = '<topic><dialog id="1" answerId="41">
<comment>comment 1</comment>
</dialog>
<dialog id="2" answerId="42" >
<comment>comment 2</comment>
</dialog>
<dialog id="3" answerId="43" >
<comment>comment 3</comment>
</dialog>
</topic>'
declare @testxml xml
set @testxml = cast(@test as xml)
declare @answerTemp Table(dialogid int, answerid int, comment varchar(1000))
insert @answerTemp
SELECT ParamValues.ID.value('@id','int') ,
ParamValues.ID.value('@answerId','int') ,
ParamValues.ID.value('(comment)[1]','VARCHAR(1000)')
FROM @testxml.nodes('topic/dialog') as ParamValues(ID)
USE YourDB
GO
INSERT INTO MyTable (FirstCol, SecondCol)
SELECT 'First' ,1
UNION ALL
SELECT 'Second' ,2
UNION ALL
SELECT 'Third' ,3
UNION ALL
SELECT 'Fourth' ,4
UNION ALL
SELECT 'Fifth' ,5
GO
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES
('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)
나는 다음을 사용 해왔다.
INSERT INTO [TableName] (ID, Name)
values (NEWID(), NEWID())
GO 10
ID와 이름에 고유 한 GUID가있는 행이 10 개 추가됩니다.
참고 : 마지막 행 (GO 10)을 ';'으로 끝내지 마십시오. 치명적인 스크립팅 오류가 발생했습니다. GO 구문 분석 중에 구문이 잘못되었습니다.
에 해당하는INSERT (Transact-SQL)(SQL Server 2005) 생략 할 수 없습니다.INSERT INTO dbo.Blah
매번 지정하거나 다른 구문 / 접근법을 사용해야합니다.
이것은 매우 빠르고 SQL에서 효율적으로 작동합니다.
테이블이 있다고 가정 해 보겠습니다.Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.
CREATE TABLE [dbo].[Sample](
[a] [int] NULL,
[b] [int] NULL,
[c] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[D] [int] NULL
)
따라서 insert 문을 반복하지 않고 다음 쿼리를 사용하여이 테이블의 여러 레코드를 삽입 할 수 없습니다.
DECLARE @LIST VARCHAR(MAX)
SET @LIST='SELECT 1, 1, ''Charan Ghate'',11
SELECT 2,2, ''Mahesh More'',12
SELECT 3,3,''Mahesh Nikam'',13
SELECT 4,4, ''Jay Kadam'',14'
INSERT SAMPLE (a, b, c,d) EXEC(@LIST)
또한 C #을 사용하여SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
한 번에 10 개의 행을 삽입 할 수 있습니다.
DataTable dt = new DataTable();
dt.Columns.Add("a");
dt.Columns.Add("b");
dt.Columns.Add("c");
dt.Columns.Add("d");
for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["a"] = 1;
dr["b"] = 2;
dr["c"] = "Charan";
dr["d"] = 4;
dt.Rows.Add(dr);
}
SqlConnection con = new SqlConnection("Connection String");
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(con))
{
con.Open();
bulkcopy.DestinationTableName = "Sample";
bulkcopy.WriteToServer(dt);
con.Close();
}
이것은 당신이 요구하는 것을 성취 할 것입니다 :
INSERT INTO table1 (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally');
향후 개발자를 위해다른 테이블에서 삽입:
INSERT INTO table1 (ID, Name)
SELECT
ID,
Name
FROM table2
또는여러 테이블에서:
INSERT INTO table1 (column2, column3)
SELECT
t2.column,
t3.column
FROM table2 t2
INNER JOIN table3 t3
ON t2.ID = t3.ID
INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally')
"VALUES" 한 번만 나타나며 세트 사이에는 쉼표가 필요합니다. - J. Chris Compton