很抱歉,如果已经被问到,但我找不到任何相关内容。
我正在从MySQL迁移到SQL Server我希望有一个.sql文件在数据库中创建数据库和表。在弄清楚语法扭结后,我已经让文件工作了(差不多)。
如果我跑
IF db_id('dbname') IS NULL
CREATE DATABASE dbname
它工作正常,如果我运行
CREATE TABLE dbname.dbo.TABLE1 (
);
...
CREATE TABLE dbname.dbo.TABLEN (
);
它也可以正常工作。但是,如果我在同一个文件中运行它,我会收到此错误
Database 'dbname' does not exist
现在,CREATE TABLE语句不在我想要的IF语句中,但我似乎也找不到它的语法。 ({}不起作用?)
所以我的重要问题是,如何确保.sql文件中的特定命令在SQL Server中的另一个之前完成?
我的第二个问题是,如何在IF子句中包含多个指令?
要明确的是,我已将其运行到sqlcmd。
答案 0 :(得分:19)
在查询之间插入GO
命令。
IF db_id('dbname') IS NULL
CREATE DATABASE dbname
GO
CREATE TABLE dbname.dbo.TABLE1 (
);
CREATE TABLE dbname.dbo.TABLEN (
);
至于将表语句放在IF中,由于GO命令,你将无法进行。之后您可以创建其他IF语句,以检查每个表是否存在。
块的语法如果是:
IF condition
BEGIN
....
....
END
答案 1 :(得分:4)
在创建数据库和创建表之间,您需要一个USE语句。
USE dbname
这样就可以在正确的位置创建表格,而无需在所有内容上指定数据库名称。
此外,GO和BEGIN ...... END就像其他人一样说。
答案 2 :(得分:1)
在语句之间放置GO
(以创建单独的批处理语句)
答案 3 :(得分:0)
您必须使用GO关键字分隔语句:
sql query
GO
another sql query
GO
and so on