지난 24 시간 동안 솔루션을 찾기 위해 인터넷을 썼지 만 아직 찾지 못했습니다. 대량 업서 트 (업데이트 또는 삽입) 단일 모델의 mssql 데이터베이스에 할 노력하고 있어요. updateOnDuplicate로 bulkCreate : true는 mssql에서 작동하지 않습니다. 다른 해결책이 있습니까? 이것은 데이터 집합으로 1 ~ 50k 행 사이에 있습니다. 어떤 도움이라도 대단히 감사하겠습니다!Sequelize : 대량 업데이트 또는 MSSQL DB에 삽입
0
A
답변
0
SQL 2016+의 경우 NVarchar (max) 매개 변수를 사용하여 대량 데이터를 JSON으로 전달하고 서버에서 구문 분석하고로드 할 수 있습니다. 귀하의 질의는 다음과 같이 보일 것이다 :
Insert into TargetTable(Number,Date,Customer,Quantity,[Order])
SELECT Number,Date,Customer,Quantity,[Order]
FROM OPENJSON (@json)
WITH (
Number varchar(200) '$.Order.Number',
Date datetime '$.Order.Date',
Customer varchar(200) '$.AccountNumber',
Quantity int '$.Item.Quantity',
[Order] nvarchar(MAX) AS JSON
);
을 그리고 당신은 NVARCHAR (최대) (문자열)과 같은 값으로 @json 매개 변수 바인딩 것 : 업데이트를 같은 것을 보일 것이다
[
{
"Order": {
"Number":"SO43659",
"Date":"2011-05-31T00:00:00"
},
"AccountNumber":"AW29825",
"Item": {
"Price":2024.9940,
"Quantity":1
}
},
{
"Order": {
"Number":"SO43661",
"Date":"2011-06-01T00:00:00"
},
"AccountNumber":"AW73565",
"Item": {
"Price":2024.9940,
"Quantity":3
}
}
]
:
를with q as
(
select t.Number, t.Quantity oldQuantity, j.Quantity newQuantity
from OPENJSON (@json)
WITH (
Number varchar(200) '$.Order.Number',
Date datetime '$.Order.Date',
Customer varchar(200) '$.AccountNumber',
Quantity int '$.Item.Quantity',
[Order] nvarchar(MAX) AS JSON
) j
join TargetTable t
on j.Number = t.Number
)
update q set oldQuantity = newQuantity
참조 :
당신이 매개 변수를 바인딩 할 수없는 경우 https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql, 그런 다음 JSON 문서를 TSQL 배치에 리터럴 문자열로 포함 시키십시오.
관련 문제
- 1. Sequelize : 대량 업데이트
- 2. MSSQL 스크립트 데이터 삽입 또는 업데이트
- 3. Sequelize mysql을 사용하여 대량 데이터 업데이트
- 4. SQL Server 2005, 대량 업데이트 또는 삽입
- 5. DB에 값 삽입 또는 기존 데이터베이스 업데이트
- 6. 테이블의 파일 이름을 사용하는 MSSQL 대량 삽입
- 7. mssql 대량 업데이트 절차 및 기능
- 8. SQLBulkCopy 또는 대량 삽입
- 9. 대량 삽입 csv에서 DB에 Linq를 사용하여 SQL
- 10. Sequelize 삽입
- 11. 동시에 대량 삽입 및 업데이트 및 업데이트
- 12. 대량 삽입/업데이트 PDO MySQL 쿼리
- 13. 대량 삽입
- 14. MYSQL에서 MSSQL Db에 액세스
- 15. Linux에서 MsSQL db에 연결
- 16. couchbase lite 모바일에서 대량 삽입/업데이트 iOS
- 17. 오브젝트를 반복하여 Sequelize db에 추가합니다.
- 18. PHP PDO 대량 레코드 삽입 또는 존재하는 경우 업데이트
- 19. 삽입 된 표를 사용하여 MSSQL 트리거 업데이트
- 20. 하나의 명령문에서 삽입 또는 업데이트 db에 대한 액세스
- 21. 대량 업데이트/SQL 데이터베이스에 데이터 삽입
- 22. SQL 대량 삽입 업데이트 - DeadLock 문제
- 23. 대량 업데이트로 업데이트 및 삽입 (SQL Server)
- 24. SQL Server 대량 삽입 및 업데이트
- 25. ADO.NET Entity Framework로 대량 삽입 및 업데이트
- 26. 하나의 쿼리에서 대량 삽입 및 업데이트 sqlite
- 27. Mysql에 대한 동시 다중 스레드 대량 데이터 삽입/업데이트
- 28. Web.config를 사용하여 MSSQL DB에 연결
- 29. 대량 삽입
- 30. 업데이트 Sequelize 배열
나는 그 반응에 대해 감사하게 생각합니다. 실제로 그것에 대해 흥미로운 방법입니다. 일반적으로 TVP와 MERGE 저장 프로 시저를 사용합니다. http://michaeljswart.com/2011/09/mythbusting-concurrent-updateinsert-solutions/ 여기에 설명 된 내용과 유사합니다. 그러나 질문은 SQL에서 그렇게하는 방법에 관한 것이 아니라 Sequelize를 사용하여 그렇게하는 방법에 관한 것이 었습니다. 나는 SQL로 그것을하는 방법을 안다.하지만 Sequelize는이 기능을 가져야한다. – tacotuesday
오른쪽. JSON을 전달하는 것은 TVP와 성능이 비슷해야하지만 클라이언트 드라이버에서 특별한 API를 지원하지 않아도됩니다. –
업데이트 또는 삽입 기능은 어떻게 작동합니까? – tacotuesday