ID 열이 하나만 있는 테이블에 행 삽입
Administrator 테이블에는 프라이머리 키인adminId 컬럼이1개밖에 없습니다.비즈니스 규칙 때문에 이렇게 해야 합니다.
이렇게 테이블에 값을 삽입하는 저장 프로시저를 작성하는 방법을 완전히 이해하고 싶습니다.SQL Server와 T-SQL을 사용하고 있으며 SCOPE_IDENTITY()를 사용해 보았습니다만, 테이블에 INSERT_IDENTY가 false 또는 off로 설정되어 있기 때문에 동작하지 않습니다.
새 행을 삽입할 수 있도록 더미 값을 삽입하지 않았으면 합니다.감사합니다!
ID인 열이1개 있는 경우는, 다음의 조작을 클릭합니다.
INSERT MyTable DEFAULT VALUES; --allows no column list. The default will be the IDENTITY
SELECT SCOPE_IDENTITY();
아이덴티티가 없다면 설정 가능합니까?이게 최선의 방법이야..위의 SQL을 사용합니다.
그렇지 않으면 새 행을 삽입합니다.
INSERT MyTable (admidid)
OUTPUT INSERTED.admidid --returns result to caller
SELECT ISNULL(MAX(admidid), 0) + 1 FROM MyTable
주의:
- 부하가 높은 경우 중복으로 인해 MAX 솔루션이 실패할 수 있습니다.
- SCOPE_IDENTY는 사실 이후가 아니라 이전입니다.
- SCOPE_IDENTY는 IDITY 열에서만 작동합니다.IDENT_CURRENT를 사용하여 모든 어리석음을 확인합니다.
- 출력구는 MAX 솔루션의 SCOPE_IDENTITY를 대체합니다.
ID_를 추가해야 합니다.선택한 문장에 삽입:
SET IDENTITY_INSERT MyTable ON
INSERT INTO MyTable
(AdminCol)
SELECT AdminColValue
FROM Tableb
끝나면 잊지 말고
SET IDENTITY_INSERT MyTable OFF
다음은 BOL의 기능에 대한 설명입니다.http://msdn.microsoft.com/en-us/library/aa259221(SQL.80).aspx
@Phil: 테이블에는 자동 증가 PK 열과 AdminName 열이라는 두 개의 열이 있다는 말씀이신가요?AdminName이 들어가는 열이 하나만 있는 경우 AdminName은 PK이므로 문자열을 자동으로 늘릴 수 없습니다.비즈니스 규칙에서는 정규화된 Windows 사용자 이름을 프라이머리 키로 해야 합니까?그러면 AdminName 열에 다른 고유 인덱스가 필요하지 않으므로 실행 가능하고 의미가 있습니다.
그러나 테이블에 열이 하나 아닌 두 개일 경우:
SQL Server에서 자동 증가는 테이블/컬럼 정의의 일부입니다.열을 정수로 정의한 다음 ID 열로 만들고 증분(일반적으로 1)을 지정합니다. 단, 2 또는 5 또는 10 또는 기타 모든 것이 될 수 있습니다.행을 삽입하려면 다른 열 값을 삽입하기만 하면 됩니다.PK 열에서는 아무것도 하지 않습니다.
insert into T
(foo) -- column(s) list
values('bar') -- values list
삽입을 실행하는 저장된 proc는 SCOPE_IDENTY를 RETURN 값으로 하거나 SCOPE_IDENTY를 OUT 파라미터로 클라이언트에 반환할 수 있습니다.
P.S SCOPE_IDENTITY()는 현재 스코프에서 최근에 생성된 자동 증가 ID 값을 반환합니다.다음 ID 값은 생성되지 않습니다.
편집:
[ Administrators ]테이블에는 관리자 세트가 포함되어 있을 수 있습니다.단, 정수 프라이머리 키열 이외의 열이 없는 경우 관리자를 식별할 수 없습니다.관리자를 구별할 수 있는 것은 서로 구별하는 것뿐입니다.그런다고 멀리 갈 수 있는 건 아니에요.단, Administrator 테이블이 다음 구조 중 하나일 경우:
ID INTEGER PRIMARY KEY AUTOINCREMENT
windowsusername varchar(50) (unique index)
또는
windowsusername varchar(50) primary key
다른 테이블에서 관리자 테이블을 참조할 수 있으며 외부 키는 의미 있는 키가 됩니다.그리고 그것이 바로 하나의 정수열로 구성된 표에는 의미가 결여되어 있습니다.
두 개의 열이 있으면 저장 프로시저에서 다음을 수행할 수 있습니다.
insert into Administrators
(windowsusername)
values('mydomain\someusername');
return SCOPE_IDENTITY();
클라이언트 프로그램은 자동 생성되어 새로 삽입된 행에 할당된 자동 증가 ID를 반환값으로 반환합니다.이 어프로치는 통상의 관행이며, 「베스트 프랙티스」라고까지 말할 수 있습니다.
추신: "아무것도 삽입할 것이 없는" 경우 "값 삽입" 방법을 몰랐다고 말씀하셨습니다.거기에는 모순이 있다.삽입할 것이 없는 경우 삽입할 필요가 있습니다.고객에 대해 전혀 알지 못하는 경우, 예를 들어 새로운 고객 기록을 작성하는 이유는 무엇입니까?그들의 이름, 도시, 전화번호가 아니라?
언급URL : https://stackoverflow.com/questions/4117676/inserting-rows-into-a-table-with-one-identity-column-only
'programing' 카테고리의 다른 글
(colon) GNU Bash 빌트인의 목적은 무엇입니까? (0) | 2023.04.21 |
---|---|
ASP에서 favicon.ico를 서비스하고 있습니다.넷 MVC (0) | 2023.04.21 |
웹 API에서 속성이 직렬화되는 것을 방지하다 (0) | 2023.04.21 |
설정 해제 vs. 변수를 비워 두도록 설정 (0) | 2023.04.21 |
"내선번호 설정으로 인해 요청하신 페이지를 제공할 수 없습니다." 오류 메시지 (0) | 2023.04.21 |