这可能很简单,但由于某种原因,我无法让它工作。我有一个典型的导入脚本我试图在一个主用户的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,所以玩得开心。干杯!
答案 0 :(得分:1)
您可能需要在脚本开头添加USE
句子,以便按如下方式指示数据库:
USE [database_name]
GO
默认情况下,SQL-SERVER使用系统数据库下列出的主数据库。
其他方式是使用数据库前缀,但包括所有者:
INSERT INTO database_name.dbo.table_name
INSERT INTO database_name..table_name