연결된 서버가 있습니다. 연결된 서버의 테이블에 레코드를 추가하고 싶습니다. 연결된 서버가있는 다른 서버에서 @@ identity를 사용할 수 있습니까? (SQL Server 2005)다른 서버 (연결된 서버)에서 @@ Identity를 가져 오십시오.
6
A
답변
5
ID를 반환하는 연결된 서버에서 저장 프로 시저를 만들 수 있습니다.
그런데 @@IDENTITY
대신 SCOPE_IDENTITY()
을 사용해야합니다.
this 관련 질문 (삽입 된 행의 ID를 얻는 가장 좋은 방법은?)을 참조하십시오.
0
여기에서 SQL Server 2012를 사용하십시오.
나는 GBN 방법을 시도했다하지만 난이 오류가 발생했습니다 :
Msg 405, Level 16, State 1, Line 1
A remote table cannot be used as a DML target in a statement which includes an OUTPUT clause or a nested DML statement.
그 외에, 내가 분산 트랜잭션을 사용했다 나의 문 앞에 SET XACT_ABORT ON;
를 추가 할 필요가 있었다.
그래서 나는이 작업을 수행하여 해결하는 문제 모두 결국 :
BEGIN DISTRIBUTED TRANSACTION
SELECT idcolumn
FROM OPENQUERY(MyRemoteServer, '
SET XACT_ABORT ON;
INSERT INTO MyRemoteBD.dbo.SomeTable(col1,col2, ...)
OUTPUT INSERTED.idcolumn
VALUES (val1,val2, ...);
SET XACT_ABORT OFF');
COMMIT
그리고 내 삽입에서 신원을 가져 오는 동안 분산 트랜잭션이 실행 할 수 있었다.
이 구문에 대한 이상한 동작은 분산 트랜잭션을 열지 않고 Insert 문을 실행하면 (분산 된 상태 여야 함) 다음 ID를 반환하지만 아무 것도 삽입하지 않는다는 것입니다. 왜 이런 일이 일어나는지 모르겠습니다.
편집 :
이 다른 방법을 시도하고 분산 트랜잭션에 XACT_ABORT ON
을 설정 필요없이 근무하고 거래없이 잘 작동했다.
exec [MyRemoteServer].MyRemoteBD.dbo.sp_executesql N'
INSERT INTO SomeTable (col1,col2,...)
VALUES (val1,val2,...);
SELECT SCOPE_IDENTITY()'
관련 문제
- 1. SQL 서버 연결된 서버
- 2. 신청서를 앞으로 가져 오십시오.
- 3. 이미지의 경로를 가져 오십시오.
- 4. RSQLite로 DB를 가져 오십시오
- 5. 연결된 서버 공급자 문제
- 6. 연결된 서버
- 7. 연결된 서버 대 통합
- 8. 어디에서나 Spring 모델을 가져 오십시오.
- 9. 응용 프로그램 폴더를 가져 오십시오.
- 10. iphone 주소록 연락처를 가져 오십시오.
- 11. 위도에 가까운 폴리곤을 가져 오십시오.
- 12. Byte Aarray에서 이미지를 가져 오십시오
- 13. HttpContext에서 Web.Config의 HttpHandlers를 가져 오십시오.
- 14. URL에서 특정 부분을 가져 오십시오
- 15. 다른 서버에서 css 가져 오기
- 16. SQL 서버에서 포스트 그레스 데이터에 액세스하는 방법 (연결된 서버)
- 17. 서버에서 서버 폴더 가져 오기 IP
- 18. 테이블 이름에 공백이있는 연결된 서버
- 19. 연결된 서버 프로파일 링
- 20. SQL Server 연결된 서버
- 21. 가져온 클래스에서 stage.stageHeight 또는 stage.stageWidth를 가져 오십시오.
- 22. 보안 연결된 서버!
- 23. Objective-C# 전체 디렉토리를 가져 오십시오.
- 24. Twitter에서 URL을 사용하는 direct_messages를 가져 오십시오.
- 25. @@ identity를 선택하면 어떻게됩니까?
- 26. 면도날 라이브 서버에서 다른 동작을하고 테스트 서버
- 27. 연결된 SQL 서버 쿼리
- 28. SQL Server에 연결된 서버?
- 29. 백업에서 연결된 서버 복원
- 30. 그냥 Maven을 사용하여 라이브러리 jar를 가져 오십시오.
저장 프로 시저를 만드는 의미는 무엇입니까? 이 링크 된 서버 코드를 실행하고 있습니다 : "insert into [(local)]. Identifier.dbo.test (name) values ('gg')"이제 삽입 된 레코드의 ID를 얻으려면 어떻게해야합니까? –
@ Raymond Morphy - 정확히 말입니다. 연결된 서버에 해당 코드가있는 저장 프로 시저를 만들고 SCOPE_IDENTITY()를 반환하면 OK입니다. 조회는 원격 서버 변수가 아닌 _local_ 서버 변수에만 액세스 할 수 있습니다. – Oded
내 삽입 문을 넣고 다음 SCOPE_IDENTITY() 후에 원격 서버의 저장 프로 시저에 넣어야한다는 뜻입니까? –