2015-01-27 3 views
4

SQL Server 데이터베이스 프로젝트 (Visual Studio 2013)에서 게시> 스크립트 생성 대화 상자에 의해 생성 된 SQL 스크립트를 실행하는 데 문제가 있습니다.SQLCMD로 게시 스크립트를 실행해도 반환되지 않습니다.

SQLCMD 모드에서 SQL Management Studio를 실행하면 생성 된 스크립트가 정상적으로 실행되고 2 - 10 초가 소요됩니다. 그러나 SQLCMD.exe (CMD 또는 배치 파일을 통해)를 사용하여 실행하면 멈추거나 끝나지 않는 것처럼 보입니다. 아마도 SQL Management Studio에서 스크립트를 실행하는 데 사용하는 몇 가지 추가 매개 변수 (미리 설정?)가 있지만 SQLCMD를 직접 사용할 수 없었습니다. 생성되는 SQL 스크립트는 일반적으로 최대 약 200 줄에 불과합니다.

"D:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.exe" -S SQLSERVER1 -i "D:\Database\MyDatabase.publish.sql" 

나는 오류를 보지 못했지만 SQLCMD는 저를 자극, 종료하지 : 여기 (윈도우 서버 2012R2에서 관리자 권한으로 실행하여, 배치 파일에서 실행되고,) 내가 사용하고있는 명령입니다 그 과정을 죽여야 해. 이 배포 프로세스를 자동화의 마지막 MANUAL 단계이기 때문에 이에 대한

/* 
Deployment script for MyDatabase 

This code was generated by a tool. 
Changes to this file may cause incorrect behavior and will be lost if 
the code is regenerated. 
*/ 

GO 
SET ANSI_NULLS, ANSI_PADDING, ANSI_WARNINGS, ARITHABORT, CONCAT_NULL_YIELDS_NULL, QUOTED_IDENTIFIER ON; 

SET NUMERIC_ROUNDABORT OFF; 


GO 
:setvar DatabaseName "MyDatabase" 
:setvar DefaultFilePrefix "MyDatabase" 
:setvar DefaultDataPath "D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\" 
:setvar DefaultLogPath "D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\" 

GO 
:on error exit 
GO 
/* 
Detect SQLCMD mode and disable script execution if SQLCMD mode is not supported. 
To re-enable the script after enabling SQLCMD mode, execute the following: 
SET NOEXEC OFF; 
*/ 
:setvar __IsSqlCmdEnabled "True" 
GO 
IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' 
    BEGIN 
     PRINT N'SQLCMD mode must be enabled to successfully execute this script.'; 
     SET NOEXEC ON; 
    END 


GO 
IF EXISTS (SELECT 1 
      FROM [master].[dbo].[sysdatabases] 
      WHERE [name] = N'$(DatabaseName)') 
    BEGIN 
     ALTER DATABASE [$(DatabaseName)] 
      SET READ_COMMITTED_SNAPSHOT OFF; 
    END 


GO 
IF EXISTS (SELECT 1 
      FROM [master].[dbo].[sysdatabases] 
      WHERE [name] = N'$(DatabaseName)') 
    BEGIN 
     ALTER DATABASE [$(DatabaseName)] 
      SET PAGE_VERIFY NONE 
      WITH ROLLBACK IMMEDIATE; 
    END 


GO 
USE [$(DatabaseName)]; 


GO 
IF fulltextserviceproperty(N'IsFulltextInstalled') = 1 
    EXECUTE sp_fulltext_database 'enable'; 


GO 
PRINT N'Dropping FK_ORDR_BPO_ORDR_MASTER...'; 


GO 
ALTER TABLE [dbo].[ORDR_BPO] DROP CONSTRAINT [FK_ORDR_BPO_ORDR_MASTER]; 


GO 
PRINT N'Dropping FK_ORDR_CommonData_ORDR_MASTER...'; 


GO 
ALTER TABLE [dbo].[ORDR_CommonData] DROP CONSTRAINT [FK_ORDR_CommonData_ORDR_MASTER]; 


GO 
PRINT N'Dropping FK_ORDR_BPO_ProductType_ValuationProductCategory...'; 


GO 
ALTER TABLE [dbo].[ORDR_BPO_ProductType] DROP CONSTRAINT [FK_ORDR_BPO_ProductType_ValuationProductCategory]; 


GO 
PRINT N'Creating [dbo].[LOG_ServiceAction]...'; 


GO 
CREATE TABLE [dbo].[LOG_ServiceAction] (
    [LOG_ServiceActionID] INT   IDENTITY (1, 1) NOT NULL, 
    [ServiceActionName] VARCHAR (255) NOT NULL, 
    [User_ID]    INT   NOT NULL, 
    [TransactionID]  VARCHAR (32) NOT NULL, 
    [Message]    VARCHAR (1000) NOT NULL, 
    [ActionDate]   DATETIME  NOT NULL, 
    [FilePath]   VARCHAR (2000) NULL, 
    [ExpiresDateUTC]  DATETIME  NOT NULL, 
    CONSTRAINT [PK_LOG_ServiceAction] PRIMARY KEY CLUSTERED ([LOG_ServiceActionID] ASC) 
); 


GO 
PRINT N'Creating FK_ORDR_BPO_ORDR_MASTER...'; 


GO 
ALTER TABLE [dbo].[ORDR_BPO] WITH NOCHECK 
    ADD CONSTRAINT [FK_ORDR_BPO_ORDR_MASTER] FOREIGN KEY ([MasterOrder_ID]) REFERENCES [dbo].[ORDR_MASTER] ([MasterOrder_ID]); 


GO 
PRINT N'Creating FK_ORDR_CommonData_ORDR_MASTER...'; 


GO 
ALTER TABLE [dbo].[ORDR_CommonData] WITH NOCHECK 
    ADD CONSTRAINT [FK_ORDR_CommonData_ORDR_MASTER] FOREIGN KEY ([MasterOrder_ID]) REFERENCES [dbo].[ORDR_MASTER] ([MasterOrder_ID]); 


GO 
PRINT N'Checking existing data against newly created constraints'; 


GO 
USE [$(DatabaseName)]; 


GO 
ALTER TABLE [dbo].[ORDR_BPO] WITH CHECK CHECK CONSTRAINT [FK_ORDR_BPO_ORDR_MASTER]; 

ALTER TABLE [dbo].[ORDR_CommonData] WITH CHECK CHECK CONSTRAINT [FK_ORDR_CommonData_ORDR_MASTER]; 


GO 
PRINT N'Update complete.'; 


GO 

어떤 도움을 주시면 감사하겠습니다 : 아래 게시 대화가 만든 스크립트의 유형의 예입니다.

업데이트 : 그래서이 문제를 진단하는 사람을 알고있는 사람에게 도움이되는 정보가 더 있습니다 ... 게시 스크립트는 DatabaseName과 같은 시작 부분에 변수를 설정하고 있습니다. 예). MS SQL Management Studio에서 SCLCMD 모드로 실행하면 스크립트가 반환되지 않는 경우가 있습니다. 그러나 SQLCMD 모드가 아닌 스크립트를 실행하고 실패한 다음 SQLCMD 모드로 다시 실행하면 성공적으로 실행됩니다.

를 : 스크립트가 SQLCMD 모드에서 whilerunning 반환하지 때 나는 반환을 오류가있는 것을 발견 한 코드의 비트가 있습니다

은 (불행하게도, 나는 오류 메시지가없는하지만 난 다시 오류가 발생했을 때 업데이트됩니다)

IF EXISTS (SELECT 1 
      FROM [master].[dbo].[sysdatabases] 
      WHERE [name] = N'$(DatabaseName)') 
    BEGIN 
     ALTER DATABASE [$(DatabaseName)] 
      SET READ_COMMITTED_SNAPSHOT OFF; 
    END 

스크립트가 ALTER DATABASE [$ (DatabaseName)] 명령에 실패했습니다. 나는 이것이 SQLCMD.exe를 사용하여 CMD 라인에서 실행될 때 동일한 시나리오가 실행되는 것으로 의심된다. 이 도움이 되었기를 바랍니다.하지만 해결책을 찾은 후이 글을 계속 편집 할 것입니다. 감사.

답변

4

음 .. 잠시 동안이 문제를 조사한 후에 마침내 내 문제에 대한 해결책을 알아 냈습니다 (문제가 해결되지 않는 이유에 대한 대답이 아니라면).

배포를 중지하고 있던 데이터베이스 프로젝트에서 데이터베이스 스크립트를 게시하거나 생성하는 동안 옵션이 있습니다. 원래의 질문에서 언급했듯이 ALTER DATABASE [$ (DatabaseName)]는 범인입니다.

게시 데이터베이스 대화 상자에있는 경우 "고급 ..."단추를 클릭하여 추가 게시 옵션을 볼 수 있습니다. "Deploy database properties"체크 박스의 체크를 해제하면 SQLCMD가 매달린 초기 ALTER DATABASE 문없이 게시 스크립트가 생성됩니다.

바라기를 이것은 누군가 다른 사람을 구하는 데 도움이되기를 바랍니다. 건배!

0

비슷한 문제가있었습니다.

이 섹션에 대한 의견을 말했습니다.

다음으로 데이터베이스에 연결된 데이터베이스 이름을 지정했습니다.(직선에서 MS SQL 서버 관리 스튜디오에서 위층)

And everything was done successfully. 
    --GO 
    --IF N'$(__IsSqlCmdEnabled)' NOT LIKE N'True' 
    -- BEGIN 
    --  PRINT N'SQLCMD mode must be enabled to successfully execute this script.'; 
    --  SET NOEXEC ON; 
    -- END 

enter image description here