SQLCMD在脚本中到达的第一个GO处停止

SQLCMD在脚本中到达的第一个GO处停止,sql,sql-server,sqlcmd,Sql,Sql Server,Sqlcmd,本质上,我需要运行一个相当大的SQL脚本,它不会在SSM中运行 然而,使用sqlcmd输入.sql文件似乎只是在它到达的第一个GO语句时停止 它似乎运行的只是: USE [master] GO CMD写入:“已将数据库上下文更改为“master” 然后是空闲、无cpu使用和最小ram使用 即使最小化脚本只是为了创建一个新的空数据库,结果也是一样的 我使用的字符串如下所示: sqlcmd -S 127.0.0.1 -U x -P x -i D:\x\f.sql USE [SpecificDa

本质上,我需要运行一个相当大的SQL脚本,它不会在SSM中运行

然而,使用sqlcmd输入.sql文件似乎只是在它到达的第一个
GO
语句时停止

它似乎运行的只是:

USE [master]
GO
CMD写入:“已将数据库上下文更改为“master”

然后是空闲、无cpu使用和最小ram使用

即使最小化脚本只是为了创建一个新的空数据库,结果也是一样的

我使用的字符串如下所示:

sqlcmd -S 127.0.0.1 -U x -P x -i D:\x\f.sql 
USE [SpecificDatabase]


/****** Object:  ForeignKey [FK_tblAppCustomers_tblCustomers]    Script Date: 11/23/2008 12:44:26 ******/
IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_tblAppCustomers_tblCustomers]') AND parent_object_id = OBJECT_ID(N'[dbo].[tblAppCustomers]'))
ALTER TABLE [dbo].[tblAppCustomers] DROP CONSTRAINT [FK_tblAppCustomers_tblCustomers]
GO
/****** Object:  ForeignKey [FK_tblAppSales_tblGS]    Script Date: 11/23/2008 12:44:26 ******/
IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_tblAppSales_tblGS]') AND parent_object_id = OBJECT_ID(N'[dbo].[tblAppSales]'))
ALTER TABLE [dbo].[tblAppSales] DROP CONSTRAINT [FK_tblAppSales_tblGS]
GO
它与数据库的连接很好,但是附带的.sql脚本仍然无法运行


将errorlevel设置为1没有帮助,它仍然会停止/停止,只是没有消息。

我想你找错地方了。

我使用sqlcmd进行无人参与的安装,并复制了这个问题,明白你的意思了

以下是我如何调用传递参数的脚本:

sqlcmd -S . -E -b -v Database="Test" -i "C:\temp\CreateDatabase.sql"
这是CreateDatabase.sql脚本文件:

:On Error exit
--:Out null
--:SetVar SQLCMDERRORLEVEL 18

-- USE [master] GO -- with this line it fails, but its in the Master context already    

DECLARE @Database varchar(64);
DECLARE @Error int;
DECLARE @Path varchar(256);
DECLARE @BackUpPath varchar(256);

SET @Database = '$(Database)';
SET @Path = '';
SET @BackUpPath = '';   

IF @Path IS NULL OR RTrim(@Path) = ''
    SET @Path = (SELECT SUBSTRING(physical_name, 1, CHARINDEX('master.mdf', LOWER(physical_name)) - 1)
                FROM master.sys.master_files
                WHERE database_id = 1 AND file_id = 1);
ELSE IF Right(@Path, 1) != ''
    SET @Path = @Path + '';

IF EXISTS(SELECT [name] as [Database]
        FROM master.sys.databases
        WHERE [name] = @Database)
    RAISERROR ('Database already exists.', 18, 10); --  :Exit(SELECT 10)

EXECUTE('CREATE DATABASE ' + @Database + ' ON PRIMARY 
        (NAME = ' + @Database + ', FILENAME = ''' + @Path + @Database + '.mdf'', FILEGROWTH = 1024KB)
        LOG ON
        (NAME = ' + @Database + '_log, FILENAME = ''' + @Path + @Database + '_log.ldf'', SIZE = 5MB,
    MAXSIZE = 25MB,
    FILEGROWTH = 5MB )
        COLLATE SQL_Latin1_General_CP1_CI_AI');

IF @@Error != 0
    RAISERROR ('Failed to create database.', 18, 12);   --  :Exit(SELECT 2)
因此,在创建数据库时不需要使用GO

在创建模式和填充数据库时,我建议使用SQL工具导出脚本,以便最终得到如下脚本:

sqlcmd -S 127.0.0.1 -U x -P x -i D:\x\f.sql 
USE [SpecificDatabase]


/****** Object:  ForeignKey [FK_tblAppCustomers_tblCustomers]    Script Date: 11/23/2008 12:44:26 ******/
IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_tblAppCustomers_tblCustomers]') AND parent_object_id = OBJECT_ID(N'[dbo].[tblAppCustomers]'))
ALTER TABLE [dbo].[tblAppCustomers] DROP CONSTRAINT [FK_tblAppCustomers_tblCustomers]
GO
/****** Object:  ForeignKey [FK_tblAppSales_tblGS]    Script Date: 11/23/2008 12:44:26 ******/
IF  EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_tblAppSales_tblGS]') AND parent_object_id = OBJECT_ID(N'[dbo].[tblAppSales]'))
ALTER TABLE [dbo].[tblAppSales] DROP CONSTRAINT [FK_tblAppSales_tblGS]
GO

我怀疑你的诊断有问题。首先,需要研究语句“不会在SSMS中运行的SQL脚本”。它是
SQLCMD
的一部分:“GO不是一个Transact-SQL语句;它是一个由SQLCMD识别的命令,并且…”我在2008 R2中用Generate脚本导出了它,因此它最终使用了使用GO的.SQL,脚本大小为500-1.2GB,因此手动编辑和拆分将是一项疯狂的工作。