繁体   English   中英

Invoke-Sqlcmd数据库中已经有一个名为_的对象

[英]Invoke-Sqlcmd there is already an object named _ in the database

我正在运行一个PowerShell脚本,该脚本创建一个数据库和一个表,如下所示:

    Invoke-Sqlcmd -Query @"
IF NOT EXISTS (SELECT name FROM master.sys.databases WHERE name = N'ADDB')
    CREATE DATABASE[ADDB]
    GO
    IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = N'UserData')
    BEGIN        
        CREATE TABLE ADDB.dbo.UserData (
            SamAccountName varchar(255) NOT NULL PRIMARY KEY,
            TeamName varchar(255) NULL,
            BuildingName varchar(255) NULL
        );        
    END
"@

第一次运行此程序时,一切正常,并且没有任何错误。 但是,如果我再次运行此命令,则会出现以下错误:

数据库中已经有一个名为“ UserData”的对象。

脚本的其余部分和后续的invoke-sqlcmds运行良好,并且表已正确更新。 在我看来,它几乎就像在忽略第二个“如果不存在”。

如果我是第一次在SQL Server Management Studio 2012中运行此命令,它将表示命令已成功运行; 如我所料。

第二次,我希望和我一样,CREATE TABLE子句仅在表不存在时才运行。 在第二种情况下,它确实存在,但出现以下错误:

消息2714,级别16,状态6,第8行在数据库中已经有一个名为“ UserData”的对象。

因此,我在这里得出的唯一结论是,问题肯定出在我对查询进行编码的方式上。

关于如何解决此问题的任何建议将不胜感激。

您永远不会更改数据库上下文,因此它会在您启动的任何数据库中查看INFORMATION_SCHEMA (可能是master ?)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM