我有一个ASP.NET MVC应用程序,我使用LinqToSql进行数据库访问。
我想从SQL脚本创建一个数据库到我的DBMS(SQL Server Express)。
当我运行我的脚本时没有SQL Server Management Studio它使用相同的用户连接,但是,当我使用ExecuteCommand
从LinqToSql运行它时,它确实给出了我不能使用GO语句的错误。如果我删除GO语句并再试一次,则表示CREATE SCHEMA应该是批处理的第一行。
因此,我很困惑,是否还有其他(更好的)运行sql脚本的方法,它包含来自asp.net mvc的CREATE DATABASE和CREATE SCHEMA语句,没有这些问题。
谢谢, cas sakal
以下是脚本的内容;
USE [master]
GO
CREATE DATABASE [TESTDB]
CREATE SCHEMA [base] AUTHORIZATION [dbo]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [base].[TestTable](
[Id] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](100) NOT NULL,
[IsActive] [bit] NOT NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
答案 0 :(得分:2)
这对我有用:
using (var db = CreateContext()) {
if (db.DatabaseExists())
db.DeleteDatabase();
db.CreateDatabase();
using (var sr = new StreamReader("prepareDatabase.sql")) {
var commands = sr.ReadToEnd().Split(new string[] {"GO\r"}, System.StringSplitOptions.RemoveEmptyEntries);
foreach (var cmd in commands) {
db.ExecuteCommand(cmd);
}
}
}
答案 1 :(得分:0)
这些任务是否必须从脚本执行?您可以使用SQL Server Management Objects来programmatic访问管理任务。例如creating a database
答案 2 :(得分:0)
GO
不是有效的T-SQL命令 - 它是SQL Server Management Studio使用的命令分隔符。您不能在要使用自己的代码执行的SQL脚本中使用GO
。
您需要做的是将该脚本分成两部分:
CREATE DATABASE
脚本您需要使用ExecuteCommand
调用一个接一个地执行。