[SQL] GUID의 SCOPE_IDENTITY ()?
SQLGUID의 SCOPE_IDENTITY ()?
SCOPE_IDENTITY의 동등한이있는 경우 누구든지 말해 줄래 () SQL Server에서 기본 키로 GUID를 사용하는 경우?
내가 먼저 GUID를 생성하고 우리가 우리의 기본 키로 순차적 GUID를 사용하는 등의 변수로 저장하지 않습니다.
무엇에 대한 어떤 생각의 마지막에 삽입 GUID 기본 키를 검색하는 가장 좋은 방법은?
해결법
-
==============================
1.당신은 출력을 사용하여 GUID 등을 얻을 수 있습니다. 당신은 또한 여러 레코드를 삽입 할 때이 작동합니다.
당신은 출력을 사용하여 GUID 등을 얻을 수 있습니다. 당신은 또한 여러 레코드를 삽입 할 때이 작동합니다.
CREATE TABLE dbo.GuidPk ( ColGuid uniqueidentifier NOT NULL DEFAULT NewSequentialID(), Col2 int NOT NULL ) GO DECLARE @op TABLE ( ColGuid uniqueidentifier ) INSERT INTO dbo.GuidPk ( Col2 ) OUTPUT inserted.ColGuid INTO @op VALUES (1) SELECT * FROM @op SELECT * FROM dbo.GuidPk
참고 : SQL 2005의 OUTPUT 절을 탐색
-
==============================
2.기본 키 같은 GUID를 사용하지만 비슷한 결과를 달성하기 위해 OUTPUT 절을 사용할 수있는 경우에는 SCOPE_IDENTITY () 해당이 없다. 당신은 출력 테이블 변수를 사용할 필요가 없습니다.
기본 키 같은 GUID를 사용하지만 비슷한 결과를 달성하기 위해 OUTPUT 절을 사용할 수있는 경우에는 SCOPE_IDENTITY () 해당이 없다. 당신은 출력 테이블 변수를 사용할 필요가 없습니다.
CREATE TABLE dbo.GuidTest ( GuidColumn uniqueidentifier NOT NULL DEFAULT NewSequentialID(), IntColumn int NOT NULL ) GO INSERT INTO GuidTest(IntColumn) OUTPUT inserted.GuidColumn VALUES(1)
당신이 닷넷 클라이언트에서 값을 읽으려면 위의 예는 유용합니다. 그냥 ExecuteScalar는 방법을 사용하는 것이 닷넷에서 값을 읽을 수 있습니다.
... string sql = "INSERT INTO GuidTest(IntColumn) OUTPUT inserted.GuidColumn VALUES(1)"; SqlCommand cmd = new SqlCommand(sql, conn); Guid guid = (Guid)cmd.ExecuteScalar(); ...
-
==============================
3.당신은) (NEWID를 사용하려면
당신은) (NEWID를 사용하려면
declare @id uniqueidentifier set @id = NEWID() INSERT INTO [dbo].[tbl1] ([id]) VALUES (@id) select @id
그러나 클러스터 된 인덱스 문제는 GUID에있다. .These 제 아이디어입니다, 기본 키로 사용 GUID 전에 생각이 하나 tooNEWSEQUENTIALID ()를 참조하십시오. :)
-
==============================
4.
CREATE TABLE TestTable(KEY uniqueidentifier, ID VARCHAR(100), Name VARCHAR(100), Value tinyint); Declare @id uniqueidentifier ; DECLARE @TmpTable TABLE (KEY uniqueidentifier); INSERT INTO [dbo].[TestTable] ([ID], [Name], Value]) OUTPUT INSERTED.KEY INTO @TmpTable VALUES(@ID, @Name, @Value); SELECT @uniqueidentifier = KEY FROM @TmpTable; DROP TABLE TestTable;
-
==============================
5.자원으로이 스레드를 사용하여, 나는 트리거 내에서 사용하기 위해 다음 생성 :
자원으로이 스레드를 사용하여, 나는 트리거 내에서 사용하기 위해 다음 생성 :
DECLARE @nextId uniqueIdentifier; DECLARE @tempTable TABLE(theKey uniqueIdentifier NOT NULL DEFAULT NewSequentialID(), b int); INSERT INTO @tempTable (b) Values(@b); SELECT @nextId = theKey from @tempTable;
다른 사람이 같은 일을 도울 수 있습니다. 사람이 좋은 아이디어가 아니거나하지 않으면 현명한 성능을 말할 아무것도 나쁜 경우이 있어요.
from https://stackoverflow.com/questions/1509947/scope-identity-for-guids by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 클러스터 된 인덱스가 고유해야합니까? (0) | 2020.04.10 |
---|---|
[SQL] 쿼리 패턴의 구현을 찾을 수 없습니다 (0) | 2020.04.10 |
[SQL] SQL Server의 고유 식별자에 VARCHAR로 변환 (0) | 2020.04.10 |
[SQL] TSQL - 정수 또는 반환 기본값 캐스트 문자열 (0) | 2020.04.10 |
[SQL] 두 소수와 다수가 SQL 서버를 배치 쓰기 (0) | 2020.04.10 |