SQL Server 기능 dbo.GetNextNumber()
을 사용하여 각 호출에 대해 일련 번호를 생성하고 싶습니다. 내가 이해하는 한, SQL Server가 함수가 결정 론적이라고 주장 할 때 네이티브 T-SQL 함수로는 불가능합니다. 하지만이 일을하는 고유 한 T-SQL 함수를 제게 보여 주면 정말로 제 하루가 걸릴 것입니다.일련 번호를 생성하는 SQL Server 기능
아마도 CLR 기능을 사용하여이 기능을 작성할 수 있다고 생각했습니다. CLR 함수는 정적이므로 시퀀스 변수를 set 변수의 호출 컨텍스트에 저장해야합니다. 정적 변수로 저장하면 동일한 시퀀스를 사용하여 여러 연결이 이루어지며 결과적으로 숫자가 일치하지 않게됩니다. set 오퍼레이션 (선택, 업데이트, 삭제, 삽입) 호출 컨텍스트에 CLR 측에서 도달 할 수 있는지 확인하기 위해 포함 된 CLR에 대해 충분히 알지 못합니다. 하루의 끝에서
,
select dbo.GetNextNumber() from sysobjects
가 결과를 반환해야 다음 쿼리
1
2
3
4
5
다른 함수 호출 문맥
exec dbo.ResetSequenceNumbers()
처럼 필요가 재설정 경우는 OK입니다
오해를 예방하고 잘못된 탐색에 시간을 낭비 할 가능성을 줄이려면 이온, 나는 테이블 생성을위한 ID 생성 기능을 찾고 있지 않으며 ID 컬럼이있는 임시 테이블을 포함하는 해킹 (함수가 아니라 proc을 사용하기는하지만)을 알고 있습니다. ROW_NUMBER()
기능은 비슷하지만 잘리지 않습니다. 어떤 응답
에 대한 많은 케말
P.S.
감사합니다 SQL Server에 내장 된 기능이 있다는 것은 놀라운 일입니다. 함수 (조인과 where 절에서 사용할 수없는 경우)는 정말 쉽고 매우 유용하지만 어떤 이유로 그것이 포함되지 않습니다.
"SQL 서버 기능 dbo.GetNextNumber()"를 묻지 말고 실제로 해결하려고하는 문제를 알려주십시오. –
'ID INT IDENTITY (1,1)'열이 하나만있는 "도우미"테이블을 사용하고 각 INSERT 후에 (SELECT SCOPE_IDENTITY()를 사용하여) 값을 가져 오거나 SQL Server "Denali" "(2011/2012)는 [SEQUENCES를 기본 데이터베이스 개체로 사용]합니다 (http://sqlblog.com/blogs/aaron_bertrand/archive/2010/11/11/sql-server-11-denali-using-sequence.aspx) –
SQL 서버 기능이 결정적 일 필요는 없습니다. 경우에 따라 결정적 함수가 필요합니다 (예 : 계산 된 열). –