Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t使用SQL Server 2008 R2在Windows 8中创建数据库_Sql_Sql Server_Sql Server 2008_Windows 8 - Fatal编程技术网

Can';t使用SQL Server 2008 R2在Windows 8中创建数据库

Can';t使用SQL Server 2008 R2在Windows 8中创建数据库,sql,sql-server,sql-server-2008,windows-8,Sql,Sql Server,Sql Server 2008,Windows 8,我正在尝试运行为我们的应用程序创建数据库的安装脚本。在升级到Windows 8之前,这些脚本一直在工作。已安装SQL Server 2008 R2 Express并运行执行以下操作以创建数据库的脚本: USE [master] GO SET NUMERIC_ROUNDABORT OFF GO SET XACT_ABORT, ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, A

我正在尝试运行为我们的应用程序创建数据库的安装脚本。在升级到Windows 8之前,这些脚本一直在工作。已安装SQL Server 2008 R2 Express并运行执行以下操作以创建数据库的脚本:

USE [master]
GO

SET NUMERIC_ROUNDABORT OFF
GO
SET XACT_ABORT, ANSI_PADDING, ANSI_WARNINGS, CONCAT_NULL_YIELDS_NULL, ARITHABORT, QUOTED_IDENTIFIER, ANSI_NULLS, NOCOUNT ON
GO
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO

IF EXISTS (SELECT name FROM sys.databases WHERE name = N'$(db)')
BEGIN
    ALTER Database [$(db)] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
    DROP Database [$(db)]
END
GO

CREATE DATABASE [$(db)]
GO
USE  [$(db)]
GO
我可以运行以下命令行来执行脚本:

sqlcmd -i test.sql -S .\wizrms -d test -U sa -P W1zard
我得到以下错误:

Msg 4060,11级,状态1,服务器。\WIZRMS,第1行
无法打开登录请求的数据库“测试”,登录失败

Msg 18456,第14级,状态1服务器。\WIZRMS,第1行
用户“sa”登录失败

我可以使用相同的凭据使用SQLServerManagementStudio登录,并使用相同的命令创建数据库


这些都可以在Windows7上运行。我的假设是Win 8中有一个我必须处理的安全性更改。

这可能是因为参数
-d test
,指定了一个尚未存在的初始数据库。当您正在运行的脚本创建数据库时,您通常首先登录到
master
DB,然后创建DB,然后切换到它进行所有剩余的工作。但在创建数据库之前尝试打开该数据库肯定会产生您在此处发布的错误

SSMS正是这样做的。它最初总是连接到master,然后在不同的DBs上工作时切换数据库。但是
CREATE DATABASE
命令总是在
master
的上下文中发出

Windows版本在这里并不重要。可能,在Win7安装中,您正在连接一个带有预先存在的
测试数据库的服务器,而在Win8计算机中,它还不存在。

谢谢Alejandro

我使用-v db=fleeb将-d改为master并分配数据库

我的命令行现在显示:

sqlcmd-i test.sql-S sof202\wizrms-d master-U sa-p W1zard-v db=fleeb

它运行正常,创建了一个名为fleeb的数据库


完美。

“用户'sa'登录失败”-wtf您是否以'sa'身份运行任何东西?请不要。当您通过SMS登录时,您是使用windows登录还是使用SA凭据?如果sa creditials为SMSS工作,那么它们应该能够为sqlcmd工作。是的,当我登录到SSMS时,我使用的是sa登录,我可以创建DB。但是如果我从cmd行尝试,我会得到错误。这就是我的困惑。谢谢你让我知道不要使用SA,你能建议我应该使用什么吗?这很有道理。我想我用的是师父。我更新了代码片段以显示脚本的整个开头。我是这个论坛的新手,不知道我需要包括多少信息,但又不能用太多的信息来掩盖事情。谢谢你的帮助。问题不在脚本中,而是命令失败了。当它连接到SQL Server时,它将尝试立即使用指定的数据库,甚至在脚本有机会运行之前。不管脚本是否在之后创建了数据库,如果在运行它之前它不存在,命令行都不会运行。因此,对于首先创建所有内容的特定脚本,请使用
-d master
运行。