데이터베이스 프로젝트에서 OPENQUERY와 연결된 서버 사용


10

TFS에 던지려는 데이터베이스를 실행하는 SQL Server 2008이 있습니다. 따라서 DB를 가져온 Visual Studio 2013 데이터베이스 프로젝트를 사용했습니다. 많은 오류를 수정 한 후 하나의 오류 만 남았습니다.

일보기에서 개발자 OPENQUERY는 연결된 서버에 액세스하는 데 사용 됩니다. 올바른 데이터베이스가 포함 된 DACPAC를 가져 와서 Add Database Reference다음 참조 옵션 을 사용 하여 프로젝트에 추가했습니다 .

데이터베이스 참조 설정

초기 스크립트 버전

다음은 원래 뷰 작성의 짧은 버전입니다.

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

이로 인해 다음과 같은 오류가 발생합니다.

오류 136 SQL71501 :보기 : [dbo]. [vwStatus]에 [LinkedServer] 개체에 대한 참조가 확인되지 않았습니다.

첫번째 시도

그래서 서버 이름 변수를 삽입하려고했습니다.

FROM       OPENQUERY($(LinkedServer), 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

어느 것이

오류 176 SQL46010 : $ (LinkedServer) 근처의 구문이 잘못되었습니다.

추가 시도

나는 arround를 조금 피하고 따옴표 붙은 식별자를 사용하거나 사용하지 않고 다음을 시도했습니다.

FROM       OPENQUERY("$(LinkedServer)", 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([$(LinkedServer)], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY([LinkedServer], 'SELECT * FROM [DB].[dbo].tbStatus') AS 
FROM       OPENQUERY("LinkedServer", 'SELECT * FROM [DB].[dbo].tbStatus') AS 

나는 항상 오류가 발생합니다.

나는 내가 여기서 내려다보고있는 단서가 없습니다. 당신 은요? 시간 내 줘서 고마워!

(슬프게도 visual-studio-2013 태그를 추가 할 수 없으므로 visual-studio를 사용했습니다)

답변:


9

나는 그것을 작동 시켰습니다.

새 데이터베이스 프로젝트를 만들었습니다 master. 거기에 폴더 Server Object와 파일을 만들었습니다 LinkedServer.sql. SQL 파일에서 연결된 서버를 추가했습니다.

GO
EXECUTE sp_addlinkedserver @server = N'LinkedServer', @srvproduct = N'sqlserver', @provider = N'SQLNCLI', @datasrc = N'LinkedServer.domain';

데이터베이스 프로젝트 master를 솔루션에 추가하고 원래 데이터베이스 프로젝트에서 참조한 후 초기 구문을 사용하여 프로젝트를 빌드 할 수있었습니다.

CREATE VIEW dbo.vwStatus
AS
SELECT     StatusID, StatusName
FROM       OPENQUERY(LinkedServer, 'SELECT * FROM [DB].[dbo].tbStatus') AS derivedtbl_1

나는 아직도 거기 LinkedServers.sql 파일과 마스터 프로젝트에도 불구하고 작업이 얻을 수 없습니다
테스트

더 많은 정보가 없으면 도움을주기가 어렵습니다. 다른 질문을하는 것이 좋습니다. 솔루션에서 마스터 프로젝트를 참조하는 것이 중요합니다. 그렇지 않으면 이것은 설명대로 정확하게 나를 위해 일했습니다.
Chake

솔루션 내에서-LinkedServer DBA와 함께 dacpac 또는 프로젝트가 있습니까?
Martin Meeser 2016 년

안녕하세요, 기억이 나지 않지만 두 번째 단락에서 dacpacs를 사용했다고 썼습니다. 그러나 최종 솔루션을 위해 마스터 DB의 데이터베이스 프로젝트를 참조했습니다.
Chake

1
'LinkedServer.sql'파일에 빌드 조치가 '빌드'로 설정되어 있는지 확인하십시오. 성가신 VS VS는 사전 배포 스크립트에서 연결된 서버를 인식하지 못하는 것 같습니다.
Taran
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.