[SQL] SQL 서버 - INSERT 후 반환 값
SQLSQL 서버 - INSERT 후 반환 값
나는 INSERT 문 후 키 - 값 다시 얻기 위해 노력하고있어. 예: 나는 속성 이름과 ID를 가진 테이블을 가지고있다. ID는 생성 된 값이다.
INSERT INTO table (name) VALUES('bob');
지금은 같은 단계의 id 다시 싶어. 어떻게 이런 일을합니까?
우리는 마이크로 소프트 SQL 서버 2008을 사용하고 있습니다.
해결법
-
==============================
1.별도의 SELECT에 대한 필요가 없습니다 ...
별도의 SELECT에 대한 필요가 없습니다 ...
INSERT INTO table (name) OUTPUT Inserted.ID VALUES('bob');
(예 : GUID를 같은) 비 IDENTITY 열에 대한이 작품도
-
==============================
2.사용 SCOPE_IDENTITY ()는 새로운 ID 값을 얻을 수
사용 SCOPE_IDENTITY ()는 새로운 ID 값을 얻을 수
INSERT INTO table (name) VALUES('bob'); SELECT SCOPE_IDENTITY()
http://msdn.microsoft.com/en-us/library/ms190315.aspx
-
==============================
3.
INSERT INTO files (title) VALUES ('whatever'); SELECT * FROM files WHERE id = SCOPE_IDENTITY();
트리거가있는 테이블에 OUTPUT 절 충돌 알려진 문제가 있기 때문에 가장 안전한 내기입니다. 만든다 테이블은 현재 어떤 트리거이없는 경우에도 같은이 매우 신뢰할 수없는 - 사람이 응용 프로그램을 중단 할 선을 하나 추가합니다. 행동의 시한 폭탄의 일종.
더 깊은 설명은 MSDN 문서를 참조하십시오
http://blogs.msdn.com/b/sqlprogrammability/archive/2008/07/11/update-with-output-clause-triggers-and-sqlmoreresults.aspx
-
==============================
4.엔티티 프레임 워크는 GBN의 대답에 비슷한 일을 수행한다 :
엔티티 프레임 워크는 GBN의 대답에 비슷한 일을 수행한다 :
DECLARE @generated_keys table([Id] uniqueidentifier) INSERT INTO Customers(FirstName) OUTPUT inserted.CustomerID INTO @generated_keys VALUES('bob'); SELECT t.[CustomerID] FROM @generated_keys AS g JOIN dbo.Customers AS t ON g.Id = t.CustomerID WHERE @@ROWCOUNT > 0
출력 결과는 표 임시 변수에 저장하고 클라이언트로 선택된다. 잡았다 알고 있어야 :
나는 EF는 내부 (상황이 두 가지가 일치하지 않을 것을 아래) 실제 테이블에 임시 테이블 다시 가입 왜 아무 생각이 없습니다.
그러나 EF는 수행의 어떤 것을.
SQL Server 2008 또는 최신에만. 그 다음 2005 년의 경우에 당신은 운입니다.
-
==============================
5.@@ IDENTITY는 마지막으로 삽입 한 ID 값을 반환하는 시스템 기능입니다.
@@ IDENTITY는 마지막으로 삽입 한 ID 값을 반환하는 시스템 기능입니다.
-
==============================
6.가장 좋고 가장 확실 솔루션 SCOPE_IDENTITY를 사용한다 ().
가장 좋고 가장 확실 솔루션 SCOPE_IDENTITY를 사용한다 ().
그냥 당신은 당신이 동일한 범위에 두 개의 인서트를 호출 할 수 있기 때문에 모든 삽입 한 후 범위 ID를 얻고 변수에 저장해야합니다.
IDENT_CURRENT 및 @@ IDENTITY는 작동 할 수 있지만 안전 범위를하지 않습니다. 당신은 큰 응용 프로그램에 문제가있을 수 있습니다
declare @duplicataId int select @duplicataId = (SELECT SCOPE_IDENTITY())
자세한 내용은 여기에 마이크로 소프트 워드 프로세서입니다
-
==============================
7.당신은) (다음 바로 ID가 당신이 SCOPE_IDENTITY에서 가져온 신원을 = 그 테이블에서 당신이 원하는대로 열을 선택 당신은 그냥 변수에 삽입 된 행의 ID를 선택 SCOPE_IDENTITY ()를 사용할 수 있습니다
당신은) (다음 바로 ID가 당신이 SCOPE_IDENTITY에서 가져온 신원을 = 그 테이블에서 당신이 원하는대로 열을 선택 당신은 그냥 변수에 삽입 된 행의 ID를 선택 SCOPE_IDENTITY ()를 사용할 수 있습니다
은 MSDN 정보 http://msdn.microsoft.com/en-us/library/ms190315.aspx 여기를 참조하십시오
-
==============================
8.삽입 후 종료하는 방법에는 여러 가지가 있습니다
삽입 후 종료하는 방법에는 여러 가지가 있습니다
DECLARE @MyTableVar TABLE (id INT,NAME NVARCHAR(50)); INSERT INTO tableName ( NAME,.... )OUTPUT INSERTED.id,INSERTED.Name INTO @MyTableVar VALUES ( 'test',... )
IDENT_CURRENT : 그것은 어떤 세션에서 특정 테이블 또는 뷰에 대해 생성 된 마지막 ID를 반환합니다.
SELECT IDENT_CURRENT('tableName') AS [IDENT_CURRENT]
SCOPE_IDENTITY : 그것은 동일한 세션과 같은 범위에서 마지막 ID를 반환합니다. 스코프 등 저장된 프로 시저 / 트리거 인
SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY];
@@ IDENTITY : 그것은 동일한 세션에서 마지막 ID를 반환합니다.
SELECT @@IDENTITY AS [@@IDENTITY];
-
==============================
9.내가 OUTPUT INSERTED을 사용하는 방법이다, SQL Server의 ID 열로 ID를 사용하는 테이블에 삽입 할 때 :
내가 OUTPUT INSERTED을 사용하는 방법이다, SQL Server의 ID 열로 ID를 사용하는 테이블에 삽입 할 때 :
'myConn is the ADO connection, RS a recordset and ID an integer Set RS=myConn.Execute("INSERT INTO M2_VOTELIST(PRODUCER_ID,TITLE,TIMEU) OUTPUT INSERTED.ID VALUES ('Gator','Test',GETDATE())") ID=RS(0)
-
==============================
10.당신은 당신의 INSERT 문에 SELECT 문을 추가 할 수 있습니다. 정수 민트 = 표에 삽입 (FNAME) 값 ( '프레드'); SCOPE_IDENTITY ()를 선택합니다; 스케일러를 실행 할 때 신원의 값을 반환합니다.
당신은 당신의 INSERT 문에 SELECT 문을 추가 할 수 있습니다. 정수 민트 = 표에 삽입 (FNAME) 값 ( '프레드'); SCOPE_IDENTITY ()를 선택합니다; 스케일러를 실행 할 때 신원의 값을 반환합니다.
-
==============================
11.* 연결 문자열 매개 변수 순서는 때때로 중요하다. * 공급자 매개 변수의 위치는 행을 추가 한 후 레코드 커서를 깰 수 있습니다. 우리는 SQLOLEDB 공급자와이 동작을 보았다.
* 연결 문자열 매개 변수 순서는 때때로 중요하다. * 공급자 매개 변수의 위치는 행을 추가 한 후 레코드 커서를 깰 수 있습니다. 우리는 SQLOLEDB 공급자와이 동작을 보았다.
행이 추가되면 공급자는 연결 문자열에서 첫 번째 매개 변수로 지정되지 않는 한, 행 필드는 사용할 수 없습니다. 공급자가 어디 첫 번째 매개 변수로 제외하고는 연결 문자열의 경우, 새로 삽입 된 행 필드는 사용할 수 없습니다. 우리가 첫 번째 매개 변수로 공급자를 이동하는 경우, 행 마술 나타났다 필드를 표시합니다.
-
==============================
12.ID 열이있는 테이블에 삽입을 수행 한 후 값을 얻기 위해 @@ IDENTITY를 참조 할 수 있습니다 : http://msdn.microsoft.com/en-us/library/aa933167%28v=sql.80%29.aspx
ID 열이있는 테이블에 삽입을 수행 한 후 값을 얻기 위해 @@ IDENTITY를 참조 할 수 있습니다 : http://msdn.microsoft.com/en-us/library/aa933167%28v=sql.80%29.aspx
from https://stackoverflow.com/questions/7917695/sql-server-return-value-after-insert by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 비슷한 결과 및 종류의 유사성을 찾는 방법은? (0) | 2020.03.17 |
---|---|
[SQL] 는 SQL에서 위해 물질을 결합 하는가? (0) | 2020.03.17 |
[SQL] SQL을 사용 orm 또는 일반? [닫은] (0) | 2020.03.17 |
[SQL] 행에서 쉼표로 구분 된 문자열을 얻을 [중복] (0) | 2020.03.17 |
[SQL] VARCHAR2와 문자 사이의 주요 차이점은 무엇입니까 (0) | 2020.03.17 |