2008-11-05 2 views
1

원본 데이터베이스 상태의 엄격한 표시자인 경우 sproc에서 외부 데이터베이스의 @@ DBTS 을 캡처하고 싶습니다. 그래, 나는 심지어 내가 할 수 있다면, 그것은 추한 것,현재 데이터베이스가 아닌 다른 데이터베이스에서 @@ DBTS를 쿼리 할 수 ​​있습니까?


USE ExternalDB
GO

SELECT @myVarbinary8 = @@DBTS
GO

USE OriginalDB
GO

를 발행 할 수도 있지만 생각합니다.

는 지금, 나는에 DBA를 요청하는 것을 잊었다까지 @Result는 = @@ 잘 작동 DBTS

을 선택

SET를 호출하기 위해 소스 데이터베이스에 스칼라 값 함수를 내장 한 프로세스를 중단시킨 새로운 사용자에게 적절한 권한을 부여하십시오.

SELECT [email protected]@DBTS

(나는 그래도 문제가 해결되지 알고)에 가깝다

뭔가.



는   MSDN @@DBTS documentation

@@ DBTS (Transact-SQL)를 참조하십시오
반환 현재 데이터베이스의 현재 타임 스탬프 데이터 유형의 값을 참조하십시오.
이 타임 스탬프는 데이터베이스에서 고유해야합니다.

답변

1

한 가지 방법은 스칼라 함수를 master 데이터베이스에 넣고 시스템 오브젝트로 표시하는 것입니다. 는 현재 데이터베이스 의 컨텍스트에서 호출되는 그런 식으로 더 많은 정보를 원하시면 여기를 참조하십시오 정보를 http://weblogs.sqlteam.com/mladenp/archive/2007/01/18/58287.aspx

0

감사합니다, 믈라덴은, 그 팁 :

을 알고하는 것이 좋다하지만 나에게 전화를하는 데 도움이 동안 현재 데이터베이스 컨텍스트 "ContextCurrent"에서 master에 상주하는 함수, 내가 원한 것은 소스 데이터베이스 "ContextSource"컨텍스트에서 스칼라 반환 함수를 호출 할 수 있어야한다는 것입니다.

일반적으로 나는 동적 SQL에 대한 내 예약을 가지고 있지만, 다음과 같이 여기에서 사용하게되었습니다. sp_executesql을 별도의 스레드에서 실행되기 때문에


DECLARE @sourceDbName nvarchar(128)
SET     @sourceDbName = N'sbaportia1'

DECLARE @strQuery nvarchar(max)
DECLARE @parmDefn nvarchar(max)
DECLARE @DbtsCapture varbinary(8)
SET    @strQuery =
   '
          N' ' + N'USE' + N' ' + @sourceDbName + N' '
        + N' ' + N'SELECT @dbtsCapture = min_active_rowversion()'
   '

SET @parmDefn =
   N'
        @dbName varchar(128),
        @dbtsCapture varbinary(8) OUTPUT
   '

EXEC sp_executesql  @strQuery
                   ,@parmDefn
                   ,@dbName = 'autobahn'
                   ,@dbtsCapture = @dbtsCapture OUTPUT

SELECT @dbtsCapture

또한, 스크립트 내에서 데이터베이스 컨텍스트 아래 가 자동으로 sp_executesql에의 진입에 따라 같은 sp_executesql을 의 종료에 따라 동일하게 될 것입니다. 는 (필자는 2000 년대 초반 년대 sp_executesql에 대해 너무 많은 waaayy 배웠습니다.)

1

"기타" 데이터베이스에 저장 프로 시저를 만듭니다

CREATE PROCEDURE dbo.GetDatabaseTimestamp AS 
    SET NOCOUNT ON; 
    SELECT @@DBTS AS CurrentRowversion, MIN_ACTIVE_ROWVERSION() AS ActiveRowversion 

그리고 현재 데이터베이스에서 당신이 호출 할 수 있습니다

EXECUTE ExternalDB.dbo.GetDatabaseTimestamp; 
+0

스타일/연습 문제 ... 내 뇌의 기능 프로그래밍 측은 불필요한 부작용 (데이터베이스 컨텍스트 w/USE 변경)을 피하는 것을 좋아합니다. 적어도 w/sp_executesql이면 문맥은 원래 상태로 되돌릴 수 있음을 보증합니다. –

관련 문제