【问题标题】:Azure database: create table if not existsAzure 数据库:如果不存在则创建表
【发布时间】:2018-04-07 04:10:55
【问题描述】:

我已经看到 Microsoft SQL Server 的“如果不存在则创建表”问题的答案(例如,CREATE TABLE IF NOT EXISTS equivalent in SQL Server

但这不适用于 Azure 数据库 - 不确定是否无法访问 sysobjects 或信息架构,但我找不到可靠的方法来确定表是否已创建,以及是否已创建不是,要再创建表。看来您必须有权访问 master 才能使其正常工作。

当我在 Azure 上尝试此查询(来自上述链接中的解决方案)时,它失败了:

if not exists (select * from sysobjects where name='cars' and xtype='U')
    create table cars (
        Name varchar(64) not null
    )
go

错误:

Msg 262, Level 14, State 1, Line 2
CREATE TABLE permission denied in database 'master'.

知道如何在 Azure 上执行此操作吗?

【问题讨论】:

  • 不要过于简单化,但您有数据库大师抛出错误。事实上,您的数据是否在主数据库中而不是在指定数据库中?
  • 这是个好问题。我不知道他们在 Azure 的幕后做什么。这不是我在 Azure 上作为 VM 运行的服务器,而是他们的数据库服务。 azure.microsoft.com/en-us/services/sql-database

标签: sql-server azure azure-sql-database


【解决方案1】:

您不能在 Azure 的主数据库中创建表。请创建一个数据库并在那里运行您的创建表脚本。

【讨论】:

  • 我已经在 Azure 上有一个数据库。我需要查看其中是否存在表,如果不存在,则创建它。
  • 您没有连接到该数据库,而是连接到了主数据库。请连接到您希望表格所在的数据库。在 SQL Azure 中,您无法执行跨数据库查询。
  • 我已连接到我的数据库。当我打开 SSMS 时,我正在连接到 Azure 中为数据库实例显示的服务器名称。如果我尝试执行 'USE [databasename]' 会失败并显示 'Msg 40508, Level 16, State 1, Line 1 USE statement is not supported to switch between databases。使用新连接连接到不同的数据库。'
  • @joelc,来自 SSMS,从下拉菜单中选择您的用户数据库。 SSMS 将在幕后为您创建新的连接。
  • 知道了 - 现在可以通过 SSMS 进行查询。我会将@Satya_MSFT 的答案标记为已接受。感谢丹的澄清!
猜你喜欢
  • 2017-03-13
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 2019-03-06
相关资源
最近更新 更多