2017-12-05 1 views
0

이 데이터베이스 프로젝트에 사용할 수있는 모든 스크립트와 절차가 준비되어 있지만 데이터베이스와 모든 테이블을 만드는 저장 프로 시저가 필요합니다. Proc에 잠재적으로 그것을 놓으십시오 (존재하는 경우). 그러나 지금은 그것을 작성하는 데 초점을 맞출 것입니다.마스터 DB의 저장 프로 시저에서 일반 DB를 만들 수 있습니까? SQL Server 2012 이상

나는 그것이 마스터 DB와 관련이 있다고 생각하지만 그것을 이해할 수는 없다.

USE master 

IF OBJECT_ID('dbo.myDB') IS NULL 

CREATE PROCEDURE myNewDatabase 
BEGIN 
CREATE DATABASE myDB 
END 

ELSE 
PRINT 'myDB Database already exists' 

참고 :

는 이런 모양 일 후, 나는 모든 테이블 권리를 만들기 위해 다른 저장된 프로 시저를 수행해야? 또한 'object_id가 null 인 경우'와 같이 약간 혼란 스러울 때 대개 프로 시저 이름을 확인하지만이 이름은 데이터베이스 이름을 확인하고 있습니까?

내 생각이 올바른 방향으로 임대되고 있는지 누군가가 알 수 있습니까?

는 나는 (이 아니기 때문에) 데이터베이스에이 방법을 만드는 것이 좋습니다 말하는 게 아니에요,하지만 당신이 정말로 원하는 경우, 여기 당신에게

+0

"I 실제로 내 데이터베이스와 모든 테이블을 만드는 저장 프로 시저를 갖고 싶습니다. "왜? 나는 그것을하고 싶어하는 사람에 대해 들어 본 적이 없다. –

+0

전혀 이해가되지 않습니다. 이외에도 완전히 이상한 당신은 동적 SQL을 사용해야 할 것입니다. 나는 이것이 왜 어떤 이점을 제공하는지 주위에 내 머리를 감싸기 시작할 수조차 없다. –

+0

어쩌면 나는 틀린 것을 이해하고 있을지 모르지만 JP Morgan의 DBA 인 교수는 우리가이 일을한다면 우리 프로젝트에 특별한 기여를 할 수있을 것이라고 말했습니다. 나는 그가 무엇에 관해 이야기하고 있는지를 알고 있다고 생각할 것이다. 그러나 나의 수준에서 나는 정직하게 확신하지 않는다. 배우려고. – Dylano236

답변

1

감사 방법 :

CREATE PROC dbo.myNewDatabase 
AS 
SET NOCOUNT ON; 

DECLARE @dbname VARCHAR(100) = 'myDB' 
     ,@path VARCHAR(1000) = 'C:\Test\' 
     ,@sql VARCHAR(1000); 



IF DB_ID(@dbname) IS NULL 
BEGIN 
    SELECT 
     @sql = 
     'CREATE DATABASE ' + @dbname + ' ON (NAME = ' + @dbname 
     + '_Data, FILENAME = ''' + @path + @dbname + '.mdf'')' 
     + ' LOG ON (NAME = ' + @dbname + '_Log, FILENAME = ''' + @path + @dbname 
     + '.ldf'')'; 
    EXEC(@sql); 
END 
ELSE 
PRINT 'myDB Database already exists' 

GO 
+0

여기서 StackOverflow의 잘못된 구문 강조 표시를 무시할 수 있습니다. –

+0

대단히 감사합니다. 도움에 감사드립니다. 나도 이상하게 들렸다. 이제는 내가 유일하지 않다는 것을 압니다. – Dylano236

+1

파일 이름과 경로를 원한다면이 작업을 단순화 할 수 있습니다. 간단히 이름을 가진 데이터베이스를 생성하면됩니다. 기본적으로 데이터베이스와 동일한 이름의 데이터 및 로그 파일을 만들어 기본 폴더에 저장합니다. 그리고 dbname을 매개 변수로 만드십시오. –

관련 문제