sql—如何在现有数据库中创建表?

jckbn6z7  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(440)

我正在尝试使用sql server和vb.net在现有数据库中创建一个表。但是,在执行代码时,我得到了一个错误。这看起来像是权限错误,因为pos\u db存在,我通过同一个连接在项目的其他地方使用它。
我不能用( trusted_connection=true )因为客户端通过网络通过sql服务器身份验证访问数据库。
有人能告诉我,怎么解决这个问题。

Public connString As String = "Data Source=SQLSERVER\SLMA;Database=POS_DB;User Id=sa;Password = xxxxxxxxxxxxx;" 'global connection string

错误:指定的架构名称“pos\u db”不存在或您没有使用它的权限。
下面是我用来创建表的代码(dbname是保存数据库名称的变量)

Private Sub cmdCreate_Click(sender As Object, e As EventArgs) Handles cmdCreate.Click
    If conn.State = ConnectionState.Open Then
        conn.Close()
    End If
    conn.Open()
    Dim obj As SqlCommand
    Dim strSQL As String
    obj = conn.CreateCommand()
    strSQL = "CREATE TABLE " & Trim(dbName) & ". ST_BOOK (" &
      "Id int NOT NULL PRIMARY KEY, " &
      "Entry  VARCHAR(30), " &
      "entry_date DATETIME, " &
      "item_name VARCHAR(50) " &
      ") "
    ' Execute
    obj.CommandText = strSQL
    obj.ExecuteNonQuery()
    conn.Close()
End Sub
70gysomp

70gysomp1#

所以错误是:
错误:指定的架构名称“pos\u db”不存在或您没有使用它的权限。
提供以下信息“pos\u db”用作架构名称。
您的代码将数据库名称连接到架构名称所在的位置。 "CREATE TABLE " & Trim(dbName) & ". ST_BOOK (" & 应该是 "CREATE TABLE " & Trim(dbName) & ".dbo.ST_BOOK (" & 或使用 .. 因为dbo是默认模式。 "CREATE TABLE " & Trim(dbName) & "..ST_BOOK (" & 顺序就像 [DatabaseName].[SchemaName].[ObjectName] objectname=表、视图、存储过程、函数、索引等的名称。。。

sbtkgmzw

sbtkgmzw2#

preben huybrechts发表的评论很有效。
问题在于

"CREATE TABLE " & Trim(dbName) & ".ST_BOOK (" & change it to "CREATE TABLE " & Trim(dbName) & ".dbo.ST_BOOK (" & See the .dbo.

顺序如下:

[DatabaseName].[SchemaName].[ObjectName] – Preben Huybrechts
k4emjkb1

k4emjkb13#

只需按照以下步骤重写代码:

Private Sub cmdCreate_Click(sender As Object, e As EventArgs) Handles cmdCreate.Click
    If conn.State = ConnectionState.Open Then
        conn.Close()
    End If
    conn.Open()
    Dim obj As SqlCommand
    Dim strSQL As String
    obj = conn.CreateCommand()
    strSQL = "CREATE TABLE ST_BOOK (" &
      "Id int NOT NULL PRIMARY KEY, " &
      "Entry  VARCHAR(30), " &
      "entry_date DATETIME, " &
      "item_name VARCHAR(50) " &
      ") "
    ' Execute
    obj.CommandText = strSQL
    obj.ExecuteNonQuery()
    conn.Close()
End Sub

注1:
因为您已经在连接字符串中提到了数据库名称,所以您不需要在代码中再次提到它,而且默认情况下,您的脚本将针对您的数据库执行。
注2:
在创建表时,如果您没有提到表的架构,则默认情况下将在数据库用户的默认架构上创建表。如果不想使用默认模式创建表,那么还需要将模式名加上一个点与表名连接起来( CREATE TABLE MySchema.ST_BOOK... ). 显然,您必须创建一个名为 MySchema ( CREATE SCHEMA MySchema ),然后再创建表

相关问题