SQL 서버 테이블에 특정 위치에 행을 삽입하려고합니다. 예를 들어, 내 테이블에 100 개의 행이 있고 위치 9에 새 행을 삽입하고 싶습니다. 그러나 테이블에 대한 PK 인 ID 열은 이미 ID가 9 인 행을 가지고 있습니다.이 위치에 행을 삽입하면 어떻게됩니까? 다음 위치로 이동 한 후 행?특정 위치의 행에 삽입하여 PK로 SQL 서버 테이블에 삽입
답변
아니요, 새 행이 삽입되는 위치를 제어 할 수 없습니다. 사실, 귀하는 SELECT
진술 문에 ORDER BY
조항을 사용하여 결과를 원하는 방식으로 주문할 필요가 없습니다.
관계형 테이블에는 '위치'가 없습니다. 최적화으로 색인은 지정된 키별로 행을 정렬합니다. 키 순서의 특정 순위에 행을 삽입하려면 해당 순위 위치에 정렬하는 키와 함께 색인을 삽입하십시오.
UPDATE TABLE table SET ID += 1 WHERE ID >= 9;
INSERT INTO TABLE (ID, ...) VALUES (9, ...);
없이 가능하게 제정신이있을 수없고, 말할 : 귀하의 경우에 당신은 ID 이상 (8) 후, 1 ID를 증가 값 9 ID를 삽입 할 경우 값을 가진 모든 행을 업데이트해야합니다 그런 일을하는 이유. 정말로 그러한 요구 사항이 있다면, 두 개 (또는 그 이상)의 파트가있는 복합 키를 사용하십시오. 이러한 키를 사용하면 하위 키를 삽입하여 원하는 순서로 정렬 할 수 있습니다. 하지만 훨씬 더 가능성이 문제가 독점적으로 정확한 ORDER BY를 지정하여, 행의 물리적 순서로 엉망으로 해결할 수 있습니다.
기본 키의 의미를 다시 한번 생각해보십시오. 엔티티 수명 동안 변경되지 않는 엔티티의 식별자. 그런 다음 질문은 질문에 착오가 더 분명하게하는 방법으로 고쳐 할 수 있습니다
나는 몇 가지 새로운 값으로 ID 9 엔티티의 내용을 변경하고 싶습니다. 엔티티 9의 이전 값은 ID가 10 인 엔티티의 내용 으로 이동해야합니다. ID 10 인 엔티티의 이전 내용은 이 ID 11 ... 등으로 엔티티로 이동되어야합니다. 가장 오래된 ID를 가진 엔티티의 이전 콘텐츠는 새로운 엔티티로 삽입되어야합니다.
일반적으로 하지 마십시오 이렇게하면 기본 키를 사용하고 싶습니다. 더 나은 접근 방법은 자신의 주문 시스템을 추적 할 수있는 '위치'또는 이와 유사한 다른 열을 만드는 것입니다.
은이 같은 쿼리를 실행할 수있는 이동 수행하려면 : 당신의 열이 AUTO_INCREMENT 기능을 사용하는 경우UPDATE table SET id = id + 1 WHERE id >= 9
이 작동하지 않습니다.
이러한 종류의 관계형 테이블의 목적을 위반하지만, 필요하다면 그렇게하는 것이 어렵지 않습니다.
1) ROW_NUMBER() OVER(ORDER BY NameOfColumnToSort ASC) AS Row
을 사용하여 테이블의 행 번호 열을 만듭니다. 당신이 복사 할 수 있습니다 여기에서 (SELECT columnsYouNeed INTO
를 사용
2)) 전과 두 개의 테이블에 테이블의 일부 후에는 (당신이 각각 WHERE Row < ##
및 Row >= ##
문을 사용) 후 귀하의 값을 삽입 할 행 수에 따라.
3) 다음은 DROP TABLE
을 사용하여 원본 테이블을 삭제합니다.
4) 그런 다음 앞에 테이블에 UNION
, 삽입 할 행 (명시 적으로 정의 된 SELECT
문 하나만 사용) 및 after 테이블을 사용합니다. 지금까지 세 개의 개별 select 절에 대해 두 개의 UNION
문이 있습니다. 여기에 SELECT INTO FROM
절에서이를 원래 테이블의 이름이라고 부르기 만하면됩니다.
5) 마지막으로 DROP TABLE
두 테이블을 작성하십시오.
이것은 ALTER TABLE
의 작동 방식과 유사합니다. MORE REF FOR
INSERT INTO customers
(customer_id, last_name, first_name)
SELECT employee_number AS customer_id, last_name, first_name
FROM employees
WHERE employee_number < 1003;
DECLARE @duplicateTable4 TABLE (id int,data VARCHAR(20))
INSERT INTO @duplicateTable4 VALUES (1,'not duplicate row')
INSERT INTO @duplicateTable4 VALUES (2,'duplicate row')
INSERT INTO @duplicateTable4 VALUES (3,'duplicate rows')
INSERT INTO @duplicateTable4 VALUES (4,'second duplicate row')
INSERT INTO @duplicateTable4 VALUES (5,'second duplicat rows')
DECLARE @duplicateTable5 TABLE (id int,data VARCHAR(20))
insert into @duplicateTable5 select *from @duplicateTable4
delete from @duplicateTable4
declare @i int , @cnt int
set @i=1
set @cnt=(select count(*) from @duplicateTable5)
while(@i<[email protected])
begin
if @i=1
begin
insert into @duplicateTable4(id,data) select 11,'indian'
insert into @duplicateTable4(id,data) select id,data from @duplicateTable5 where [email protected]
end
else
insert into @duplicateTable4(id,data) select id,data from @duplicateTable5 where [email protected]
set @[email protected]+1
end
select *from @duplicateTable4
이 코드는 다음에, 특정한 위치에 값을 삽입 할 수
- 1. 특정 값을 DB에 삽입하여 테이블에 표시 하시겠습니까?
- 2. 특정 위치의 목록에 스칼라 삽입
- 3. 파일의 특정 행에 행 삽입
- 4. SQL 테이블에 데이터 삽입
- 5. SQL 테이블에 데이터 삽입
- 6. 관련 테이블에 SQL 삽입
- 7. SQL 두 테이블에 삽입
- 8. 간단한 삽입, SQL 서버
- 9. 기존 행에 GUID 삽입
- 10. SQL 문에서 특정 행에 특정 조건을 적용
- 11. SQL 서버 삽입 문
- 12. 조건부 삽입 SQL 서버
- 13. SQL 테이블에 데이터 세트 삽입
- 14. SQL 서버 한 테이블에서 다른 테이블에 레코드 삽입
- 15. SQL 서버 테이블에 데이터 형식 타임 스탬프 삽입
- 16. SQL 서버 2008 R2 삽입
- 17. 삽입 된 행에 대한 DATETIME 가져 오기
- 18. 자바 1.4 - SQL 서버 2000 : 테이블에
- 19. SQL Server 2008 : 일괄 처리 테이블에 삽입
- 20. 특정 화면 위치의 이미지
- 21. Oracle에서 SQL Server 테이블에 행 삽입
- 22. 하나의 테이블에 SQL 서버 데드락 문제가 발생했습니다.
- 23. 는 SQL 서버 고성능 삽입
- 24. PHP SQL 서버 문제 삽입
- 25. SQL 서버 삽입 쿼리 문제
- 26. ASP.NET SQL 서버 삽입 오류
- 27. 는 SQL 서버 : "Northwind를"샘플을 사용하여 삽입
- 28. DB2 테이블에서 선택하고 SQL 테이블에 삽입
- 29. 배열에서 테이블에 삽입
- 30. SQL Server - 선택적으로 임시 테이블에 필드 삽입
내가 설정 위치 = 새로운 로우 값은 행 1의 위치에 삽입 한 –