我正在尝试编写一个小脚本来创建一个数据库(如果它不存在),并在该表不存在时为该数据库创建一个表。我有这个:
IF (db_id('db') is null) BEGIN
print 'Must create the database!';
CREATE DATABASE db;
END
USE db;
IF (object_id('test_table', 'U') is null) BEGIN
print 'Must create the table!';
CREATE TABLE test_table (
id int
);
END
我发现了一个奇怪的错误:
Database 'db' does not exist. Make sure that the name is entered correctly.
我猜它是在运行它之前解析脚本并发现'db'不存在,所以它不能使用它。
必须有一个解决方案。任何帮助表示赞赏。
解决!
我发布了GO关键字解决问题后5分钟。这是固定代码:
IF (db_id('db') is null) BEGIN
print 'Must create the database!'
CREATE DATABASE db;
END
GO
USE db
IF (object_id('test_table', 'U') is null) BEGIN
print 'Must create the table!';
CREATE TABLE test_table (
id int
);
END
抱歉浪费每个人的时间。
答案 0 :(得分:2)
除非将它们分开,否则SQL语句将被解析为一个批处理。在SQL Server中,您可以使用GO执行此操作。在MySQL和SQL Server中,您都可以使用BEGIN和END。
如果要在不同的实例中将单独的块提交到数据库,可以分别对SQL Server和MySQL使用BEGIN TRANS / COMMIT TRANS和START TRANSACTION / COMMIT。
答案 1 :(得分:1)
Check if table exists in SQL Server的某些内容可能会有效(稍有变化)
IF (NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'TheSchema'
AND TABLE_NAME = 'TheTable'))
BEGIN
--Do Stuff
END
答案 2 :(得分:0)
我可能会建议使用内置的SQL语法 -
CREATE DATABASE name IF NOT EXISTS;
随后
CREATE TABLE name(definition)IF NOT EXISTS;