【问题标题】:DELETE*FROM table删除*从表
【发布时间】:2011-07-26 16:03:57
【问题描述】:

有没有办法(类似于下面的代码)使用c#删除指定表中的所有行?

SqlConnection con = new SqlConnection(conString);
con.Open();

string sql = @"DELETE*FROM compsTickers;";
SqlCommand cmd = new SqlCommand(sql, con);
cmd.ExecuteNonQuery();
con.Close();

现在我收到一个错误:

“*”附近的语法不正确

【问题讨论】:

  • 当您在 SQL 中遇到语法错误时,最好直接对数据库执行有问题的 SQL(对于 SQL Server,这将使用 Management Studio/Query Analyzer);这应该突出问题所在,或者至少向您表明问题不在于您的 C# 代码,而在于 SQL 本身。

标签: c# asp.net .net sql sql-server


【解决方案1】:

你不指定列 DELETE FROM compsTickers 就足够了。

TRUNCATE TABLE compsTickers 也可以,这是一种不同的删除方式,这可能取决于您的事务日志设置)

【讨论】:

  • 有什么理由不需要*吗?
  • 截断还会重置 IDENTITY 字段,这可能需要也可能不需要。
  • @cfarm54 - 你删除了一个完整的行 - 永远不会有“部分”删除。你可以UPDATE 来清空某些列,或者设置为 NULL 或任何你想要的。
  • +1 表示截断,这通常更快并重置标识字段。
【解决方案2】:

只需删除*,因为DELETE 语句不需要它

string sql = @"DELETE FROM compsTickers;";

【讨论】:

    【解决方案3】:

    您的 C# 代码没有任何问题;这是 SQL 语法错误。

    无论如何,不​​需要*。您从表中删除 rows,而不是 columns,因此您无需指定要删除的列:

    DELETE FROM compsTickers
    

    【讨论】:

    • 正如 Mark Redman 在 cairnz 的回答下所解释的那样,如果您想在清空桌子时重置您的身份,您应该改用 TRUNCATE TABLE
    【解决方案4】:

    DELETE (Transact-SQL)(链接)

    FROM 是可选的。你总是从表中删除,所以你只需要(你甚至不需要语句分隔符,对于单个语句):

    DELETE compsTickers
    

    清空表

    • 但不重置标识列(如果有)

    【讨论】:

    • 可选的FROM 子句是 T-SQL 还是标准 ANSI SQL 的一部分?
    • 它只是 SQL Server(我链接到联机丛书而不是 SQL92 参考)但我的水晶球告诉我这就是 OP 正在使用的。
    • 看起来像。我只是好奇,就是这样:) +1
    【解决方案5】:

    我会建议使用

    1. 执行所有操作的存储过程。
    2. 您必须始终避免在代码中使用硬编码字符串。
    3. 管理事务以防您需要恢复更改。

    【讨论】:

    • 这是一个清晰的数据库方法,所以在这种情况下可能没问题?
    【解决方案6】:

    发生错误接缝是因为“*”前后没有空格(应该是“*”)。

    【讨论】:

    • 根本不应该有*
    【解决方案7】:
    string sql = @"DELETE FROM compsTickers;";
    

    您无需使用* 或在删除语句中指定任何列名。

    【讨论】:

      【解决方案8】:

      在删除查询中写“*”不是一个好习惯。由于我们没有删除列,我们实际上是从表中删除行。

      * 指表中的所有列。尝试使用以下语法 'Delete from compsTickers' 后跟 where 条件。

      【讨论】:

        【解决方案9】:

        删除命令的语法不正确。您不需要在删除命令中使用'*'。为您的工作使用命令 string sql = @"DELETE FROM compsTickers;"

        谢谢。

        【讨论】:

          【解决方案10】:
          SqlConnection con = new SqlConnection(conString);
          con.close();
          cmd=new SqlCommand("DELETE FROM compsTickers", con);
          con.Open();
          int i = cmd.ExecuteNonQuery();
          if(i>0)
          {
           MessageBox.Show("Successful.");
          }
          con.Close();
          

          【讨论】:

          • con.close() 将无法编译,您为什么要尝试关闭新连接?如果表为空,i 将为零,因此i == 0 成功。
          • 我总是全局传递连接字符串,这里只是为了表明连接字符串存在。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-26
          • 2019-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多