2009-03-31 3 views
12

Visual Studio 데이터베이스 에디션에는 다른 사람이 빌드시 데이터베이스 프로젝트에서 생성 한 .dbschema 파일을 데이터베이스에 배포 할 수 있도록 해주는 vsdbcmd.exe 도구가 함께 제공됩니다. 는 SQL :데이터베이스 배포 (vsdbcmd.exe) : DatabaseName 및 DefaultDataPath가 무시됩니까?

vsdbcmd.exe/A : 배포/CS/DSP "; 진정한 통합 보안 = 풀링 = 거짓 = (로컬) 데이터 소스"그것은 먼저 그것을 실행하는 스크립트를 작성하여이를 수행/일 /model:"..\Database.dbschema "/ P : 경우 TargetDatabase = TargetDB /manifest:"..\Database.deploymanifest"

나는 그것이 다른 데이터베이스 서버에 스크립트를 배포 할 수 있다는 기대

문제없이. 그러나 실제 .mdf 파일의 전체 경로는 원래 databse에 대한 다른 참조와 함께 스크립트에 인코딩됩니다. 이것을 제어하는 ​​옵션이 없거나 찾을 수 없습니다.

누구든지 사용하고 있습니까? 어떻게 배포합니까? 나는 다른 종류의 데이터베이스 프로젝트를 사용해야 할 것인가? (나는 "데이터베이스 프로젝트"와 "서버 프로젝트"사이의 선택 방법을 기억하고있다.

편집

난 그냥 벌금 .sqlcmdvars를 오버라이드 (override) 할 수 있지만,이 문제가 해결되지 않습니다. 위의 명령을 사용하여 생성 된 .sql 파일에서 추출한 것입니다.

GO 
:setvar DatabaseName "TargetDB" 
:setvar DefaultDataPath "C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\" 

따라서 "targetdb"대상 데이터베이스가 올바르게 기록됩니다. 그러나, 더 몇 줄 :

Original.mdf 원래 데이터베이스의 이름입니다 (우리가 개발하는 동안 배포, 즉 dB, 그리고이 데이터베이스 프로젝트의 프로젝트 속성에서 설정)
CREATE DATABASE [$(DatabaseName)] 
ON 
PRIMARY(NAME = [Original], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original.mdf', SIZE = 3072 KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB) 
LOG ON (NAME = [Original_log], FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATA\Original_log.ldf', SIZE = 1024 KB, MAXSIZE = 2097152 MB, FILEGROWTH = 10 %) 

. 여기서 db는 이미 존재하기 때문에 대상 컴퓨터 나 컴퓨터에서 정확한 경로가 다를 수 있기 때문에 배포가 실패하는 곳입니다.

이 값은 생성 된 스크립트에서 하드 코드 된 것처럼 보입니다.

답변

5

이 답을해야합니다. 내 환경은 VS2010 Enterprise RTM입니다.

생성 된 ALTER DATABASE 문은 대체 값을 고려하지 않고 소스 데이터베이스를 미러링하도록 생성됩니다 (초기 데이터베이스 크기 등도 포함). 이 문제는 초기 데이터베이스 가져 오기에 나타나지 않습니다.

편집 아래에있는 파일을 ...

스키마 개체 \ 데이터베이스 레벨 \ 저장 \ 파일

개체 ... 그리고 올바른 $(DefaultDataPath)$(DatabaseName).mdf/$(DefaultLogPath)$(DatabaseName)_log.ldf 값을 포함하도록 수정 - 기타 -- 적절한. (이제 Schema Compare : -P에서 "Skip"으로 표시)

위의 "수정"값을 외부에 유지하면이 속성을 관리하는 데 선호되는 방법입니다.

해피 코딩.

+1

차가움. 나는 그것이 일했을 것이라고 믿었지만 그것을 확인하지 않았기 때문에 당신의 대답을 받아 들일 것입니다. - 이후로 작업을 옮겼습니다 :) –

+0

같은 문제가 있지만이 디렉토리에 파일이 없습니다. –

1

편집 내용에 따라 아마도 도움이 될 것입니다. https://blogs.msdn.com/gertd/Default.aspx?p=7

변수를 추가

는 지금까지 우리는 이제 새로운 변수를 추가하고 작업을 넣어하는 시간이다, 사물이 작동하는 방법을 찾고있다. 변수를 편리하게 사용할 수있는 곳은 files : storage.sql을 정의하는 사후 배포 파일입니다. 변수를 사용하면 위치 환경을 종속적으로 만들 수 있습니다. 이 같은 것을 발견 할 것이다 저장 파일 내부

: ALTER 데이터베이스를 시작하지가있는 경우

(이름 = 'fgdb_data은'dbo.sysfiles로부터 1 선택) $ (여기서 databaseName)] 파일 추가 ( NAME = N'fgdb_data ', FILENAME = N'C : \ Program Files \ Microsoft SQL Server \ MSSQL.1 \ MSSQL \ DATA \ fgdb_data.NDF ', MAXSIZE = 100메가바이트, FILEGROWTH = 10메가바이트 ) 는 [테이블] END를 파일 그룹

우리는이 그렇게 드라이브와 디렉토리에 변수를 추출 얻을 매개 변수화 할 수

:

: SETVAR 드라이브 " C : " : SETVAR 디렉토리는"NOT이있는 경우 프로그램 Files \ Microsoft SQL 서버 \ MSSQL.1 \ MSSQL \ DATA "

ALTER 데이터베이스 [BEGIN (이름 = 'fgdb_data은'dbo.sysfiles로부터 1 선택) $ (databasename)] 파일 추가 ( NAME = N'fgdb_data ', FILENAME = N'$ (드라이브) \ $ (디렉토리) \ fgdb_data.ndf ', MAXSIZE = 1백메가바이트, FILEGROWTH = 10메가바이트 ) [파일 그룹 테이블] end

이제 스크립트를 매개 변수화 했으므로 변수를 프로젝트 파일의 일부로 만들었으므로 여러 위치의 코드에 흩어져있는 대신 단일 위치에 정의했습니다. setvar 문. > 데이터베이스 프로젝트 - 데이터베이스 스키마 동기화를 수행 할 때

죄송합니다 일으켰 난 그냥 GDR에게 자신을 배우기 시작하고 있지만 (입니다)이 될 수

+0

작동하지 않습니다. 생성 된 .sql 파일에서 실제 .mdf 파일의 경로는 하드 코딩되어 있습니다 (즉, 변수에없는 것). 내 질문을 수정하겠습니다. –

+0

피드백에 기반하여 내 게시물을 편집했지만 아직 GDR을 배우고 있으며 자신이 어떻게 작동하는지 이해하고 싶습니다. –

+0

그냥 그게 내 편집을 참조하십시오 - 이미 기본적으로 이러한 변수 (DatabaseName 및 DefaultDataPath)가 있습니다. db가 작성되는 스크립트의 특정 위치에서 사용되지는 않습니다. –