【问题标题】:How to handle spaces in database name for Sql server CREATE TABLE?如何处理 Sql server CREATE TABLE 的数据库名称中的空格?
【发布时间】:2015-03-16 12:31:04
【问题描述】:

我有以下代码,我在 vb.net 项目中使用它。如果数据库名称中没有空格,这很有效。例如,如果数据库名称是“SampleCompany”,它可以正常工作,但如果数据库名称更改为“Sample Company” 我们在这部分 sql 命令中收到错误:“BEGIN CREATE TABLE” & cn.Database。 我们必须能够处理带/不带空格的数据库名称。

有什么建议可以解决这个问题吗? 谢谢。

cn.Database="Sample Company"

sqlCreate = "IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE      TABLE_NAME = 'Cloud_UserSetting' AND TABLE_CATALOG ='" & cn.Database & "') " & _
            "BEGIN CREATE TABLE " & cn.Database & ".dbo.Cloud_UserSetting(CloudId int NOT NULL, Name varchar(100) NOT NULL," & _
            "Setting varchar(250) NULL " & _
            "CONSTRAINT PK_Cloud_UserSetting PRIMARY KEY CLUSTERED(CloudId,Name)) END"
command = New SqlCommand(sqlCreate, cn)
command.ExecuteNonQuery()

【问题讨论】:

  • 标识符中不允许有空格,除非它是分隔标识符。 “Sample Company”为 ANSI SQL,或者可能是 [Sample Company] MS 样式。
  • 补充一下 Jarlth 所说的,双引号或方括号都可用于将 Microsoft SQL Server 中的标识符括起来。 QUOTED_IDENTIFIER 设置必须打开才能使用 ANSI 标准双引号。

标签: sql .net sql-server database vb.net


【解决方案1】:

使用方括号来包含列名和表名。

例如:代替table name 使用:[table name]

【讨论】:

  • 工作正常,谢谢
  • @User1162527:或者,如果您关心与 SQL 标准的兼容性,您也可以使用双引号:"table name"(如果我没记错的话,您需要启用 QUOTED_IDENTIFIER)
【解决方案2】:

您可以在数据库名称中简单地使用方括号,如下所示:

cn.Database="[Sample Company]"

sqlCreate = "IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE      TABLE_NAME = 'Cloud_UserSetting' AND TABLE_CATALOG ='" & cn.Database & "') " & _
            "BEGIN CREATE TABLE " & cn.Database & ".dbo.Cloud_UserSetting(CloudId int NOT NULL, Name varchar(100) NOT NULL," & _
            "Setting varchar(250) NULL " & _
            "CONSTRAINT PK_Cloud_UserSetting PRIMARY KEY CLUSTERED(CloudId,Name)) END"
command = New SqlCommand(sqlCreate, cn)
command.ExecuteNonQuery()

【讨论】:

    猜你喜欢
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 2014-05-29
    • 1970-01-01
    相关资源
    最近更新 更多