使用变量值更新sql中的列

时间:2017-08-15 10:22:15

标签: c# sql

我正在尝试使用包含列名而不是编写列名的变量来更新表列。如何正确编写查询?我试过了

UPDATE Room 
SET ['"+Time+"']=0 
where Day='"+Day+"'

此查询显示错误

  

列名无效

虽然它与列名完全匹配。

1 个答案:

答案 0 :(得分:1)

你可能正在寻找这样的语法:

  string sql = 
     $@"UPDATE Room
           SET [{Time}] = 0 -- Time contains field's name no need in '...'
         WHERE [Day] = '{Day}'";

但是,硬编码 - ...'{Day}'...不良做法,参数化是正确方式

  string sql = 
     $@"UPDATE Room
           SET [{Time}] = 0
         WHERE [Day] = @prm_Day";

  // Providing that you use MS SQL - SqlCommand
  using (SqlCommand q = new SqlCommand(sql, MyConnection)) {
    //TODO: Check the actual RDMBS type - is it SqlDbType.DateTime? 
    q.Parameters.Add("@prm_Day", SqlDbType.DateTime).Value = Day;

    q.ExecuteNonQuery();
  }

修改:旧的C#版本不支持字符串插值(字符串前的$,请参阅下面的评论),替代方案是格式化

  string sql = string.Format(
     @"UPDATE Room
          SET [{0}] = 0 -- Time contains field's name no need in '...'
        WHERE [Day] = '{1}'", Time, Day);

  string sql = string.Format(
      @"UPDATE Room
           SET [{0}] = 0
         WHERE [Day] = @prm_Day", Time);