C# SQL 创建表如果它不存在[重复]
Posted
技术标签:
【中文标题】C# SQL 创建表如果它不存在[重复]【英文标题】:C# SQL create table IF it doesn't already exist [duplicate] 【发布时间】:2010-05-27 17:39:23 【问题描述】:嘿,我正在尝试在我的 C# 应用程序中添加一些逻辑,如果它不存在,它将创建一个名为 Import 的表。这是我的代码,它似乎不起作用。
con.Open();
using (SqlCommand cmd = con.CreateCommand())
cmd.CommandText =
@"
IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'RX_CMMData' AND TABLE_NAME = 'Import'))
BEGIN
CREATE TABLE Import (
RowId integer PRIMARY KEY NOT NULL,
PartNumber varchar(200) NOT NULL,
CMMNumber varchar(200) NOT NULL,
Date varchar(200) NOT NULL,
FeatType varchar(200) NOT NULL,
FeatName varchar(200) NOT NULL,
Value varchar(200) NOT NULL,
Actual decimal,
Nominal decimal,
Dev decimal,
TolMin decimal,
TolPlus decimal,
OutOfTol decimal,
FileName varchar(200) NOT NULL
); END";
cmd.ExecuteNonQuery();
con.Close();
【问题讨论】:
你得到什么错误?不显示吗? 【参考方案1】:如果表存在,则您的 SQL 正在创建表,如果不存在,则不创建。
将 SQL 更改为 IF NOT EXISTS
。
【讨论】:
仍然无法正常工作。创建后,我再次运行该应用程序,但无法说明“表导入已存在”。 如果你运行SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Import'
,你会看到什么? (见安多马尔的回答)
是的,您正在查询 INFORMATION SCHEMA 以查找 TABLE_SCHEMA = 'RX_CMMData' 但您的 create 语句正在使用可能是 dbo 的默认模式创建表。请参阅 Andomar 的答案中的语法。【参考方案2】:
SQL Server 2005下的语法是
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tablename]') AND type in (N'U'))
BEGIN
-- create
END
在您的代码中,= FALSE
或 NOT
关键字在哪里?
【讨论】:
【参考方案3】:您还可以考虑使用 Microsoft SMO 对象。我更喜欢使用 SMO 对象并尽可能让它们为我完成工作,而不是通过代码执行 SQL 文本。
使用 SMO 数据库对象,您可以执行以下操作。
Database db = myServer.Databases["MyDB"];
if (! db.Tables.Contains("NewTable"))
Table tbl = new Table(db, "NewTable");
Column col1 = new Column(tbl, "Column1", DataType.Varchar(10));
col1.Nullable = true;
tbl.Columns.Add(col1);
tbl.Create();
http://www.mssqltips.com/tip.asp?tip=1826
【讨论】:
不同的笔画等等,但我发现只编写 SQL 脚本比创建所有对象并像示例代码中那样设置属性要容易得多。【参考方案4】:您可能是在默认架构中创建表(通常是 dbo
。)
指定全名,如:
CREATE TABLE RX_CMMData.Import
【讨论】:
【参考方案5】:某些 DBMS 允许您在 SQL 中执行CREATE TABLE IF NOT EXISTS <tablename>
。我会检查你的 DBMS 的语法。
【讨论】:
Oracle 允许创建或替换 如果您在 Oracle 中执行 CREATE OR REPLACE,会删除当前存储在表中的数据,还是仅更改表定义?感觉不太一样。 否 - 如果表存在,那么数据就可以了(前提是您没有进行任何会影响数据的更改,例如删除列或其他内容)【参考方案6】:如果你用的是Oracle,你可以试试
select count(*) from user_tables
where table_name = ''
应该告诉你表是否存在
【讨论】:
以上是关于C# SQL 创建表如果它不存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如果存在则删除表 Oracle,SQL Developer [重复]
检查架构中的 IF 表 EXISTS 时发生 Oracle PL/SQL 过程错误 [重复]
在oracle中创建表,如何写sql语句才能保证表不重复创建,也就是说,如何让他不提示表或视图已存在