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 라인에서 실행될 때 동일한 시나리오가 실행되는 것으로 의심된다. 이 도움이 되었기를 바랍니다.하지만 해결책을 찾은 후이 글을 계속 편집 할 것입니다. 감사.