我在使用 CREATE IF NOT EXISTS 子句时遇到了一些麻烦。
我正在使用C#应用程序创建一个MySQL表,已经建立了与DB的连接,所以这不是问题。
当我尝试执行查询时,我得到的错误是一个例外,我收到消息:
MySql.Data.MySqlClient.MySqlException(0x80004005):您有错误 在你的SQL语法中;查看与MySQL对应的手册 在'IF NOT EXISTS附近使用正确语法的服务器版本(价格 第3行的VARCHAR,time VARCHAR)
在调试模式下,立即窗口将我的命令字符串显示为:
CREATE TABLE ticks_14_11_2016 IF NOT EXISTS(价格VARCHAR,时间 VARCHAR)
从我看到的例子中,这应该是正确的语法。我暂时不担心约束和键,我只需要执行查询...
此外,这是我用来构建字符串和执行查询的C#代码:
string tableName = "ticks_" + getTodayString();
if (databaseClient.IsConnect()) {
string tableString = "CREATE TABLE " + tableName +
" IF NOT EXISTS" +
"(price VARCHAR, " +
"time VARCHAR)";
try
{
var command = databaseClient.Connection.CreateCommand();
command.CommandText = tableString;
command.ExecuteNonQuery();
} catch (Exception e)
{
Console.WriteLine(e);
}
}
变量 databaseClient 的成员是MySQLConnection对象
另外,我的服务器版本是: 5.6.28-76.1
答案 0 :(得分:3)
您的if not exists
位置错误,varchar
类型需要强制性长度参数。
更正后的版本应为:
CREATE TABLE IF NOT EXISTS ticks_XXXXX (price VARCHAR(10), time VARCHAR(10));
将长度更改为适合您的长度。
有关详细信息,请参阅reference manual。
答案 1 :(得分:0)
您还有其他方法可以检查数据库中是否存在表。
IF OBJECT_ID(N'dbo.ticks_14_11_2016', N'U') IS NOT NULL
BEGIN
------Exists
END
IF EXISTS(SELECT 1 FROM sys.Objects WHERE Object_id =
OBJECT_ID(N'dbo.ticks_14_11_2016') AND Type = N'U')
BEGIN
------Exists
END
IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'ticks_14_11_2016 ' AND Type = N'U')
BEGIN
----Exists
END
IF OBJECT_ID('ticks_14_11_2016') IS NOT NULL
BEGIN
-----Exists
END
相应地使用您的逻辑