一个用户下多个数据库的SQL脚本语法

时间:2011-03-29 02:45:51

标签: sql sql-server insert

这可能很简单,但由于某种原因,我无法让它工作。我有一个典型的导入脚本我试图在一个主用户的MS SQL服务器上运行(而不是只能访问一个数据库的单个用户)。

当我运行.SQL脚本时,它会创建数据库,然后开始创建表。这是有趣的地方。它不是在我刚刚制作的数据库下创建数据库。它将表放在“系统数据库”视图下,而不是将表创建限制为刚刚创建的数据库。

我试过了:

CREATE TABLE table_name
CREATE TABLE database_name.table_name

也许我忽视了一些非常简单的事情。我通常不会遇到MySQL,只有一个用户映射到一个数据库,我认为因为用户只能看到一个数据库,所以MySQL认为它必须是一个可以使用的数据库。

现在的不同之处在于我正在使用MSSQL 2008,也许它的工作方式略有不同,我忽略了一些东西。谢谢你的帮助!


也试过这个。没运气。说它在尝试创建表时不存在。我认为它是查询脚本的上/下读取,它首先会创建数据库,然后尝试创建表。

CREATE DATABASE DATABASENAME;
CREATE TABLE DATABASENAME.dbo.TABLENAME
  (
     field_one   VARCHAR(100) NOT NULL,
     field_two INT NOT NULL,
     PRIMARY KEY(field_one)
  )

这是一个很好的例子。这种语法运行良好,我不需要以这种方式在表名之前指定DBO路径。更干净,并得到了我正在寻找的结果。谢谢大家。

IF Db_id('DBNAME') IS NULL
  CREATE DATABASE DBNAME;

GO

USE [DBNAME];

GO

CREATE TABLE TABLENAME
  (
     COL1   VARCHAR(100) NOT NULL,
     COL2 INT NOT NULL,
     PRIMARY KEY(COL2)
  )

INSERT INTO TABLENAME
            (COL1,
             COL2)
     VALUES('1234',1001),
            ('1234',1002),
            ('1234',1003),
            ('1234',1004)

它基本上只是检查以确保在执行任何其他操作之前创建数据库,然后将USE数据库设置为我正在使用的数据库。其他一切都只是普通的SQL,所以玩得开心。干杯!

1 个答案:

答案 0 :(得分:1)

您可能需要在脚本开头添加USE句子,以便按如下方式指示数据库:

USE [database_name]
GO

默认情况下,SQL-SERVER使用系统数据库下列出的主数据库。

其他方式是使用数据库前缀,但包括所有者:

INSERT INTO database_name.dbo.table_name
INSERT INTO database_name..table_name