【问题标题】:Updating a column causes database error更新列会导致数据库错误
【发布时间】:2013-04-23 13:13:09
【问题描述】:

我正在尝试用开发电子邮件地址替换电子邮件地址,以便测试我的电子邮件发送功能。

下面的函数导致我的网页停止响应,当我尝试查看 SQL Server Management 2008 中的表时,我无法响应。我相信问题出在这条线上

$scrub = sqlsrv_query($conn, "UPDATE " . $tName . " SET DCAEmail='test@test.edu'");

不过,我不确定。整个函数:

function scrubEmail($conn){
   $tableNameList = array();
   $getTableName = sqlsrv_query($conn, "Select Name FROM sys.tables");
   while($row = sqlsrv_fetch_array($getTableName)){
      if($row['Name'] !== "sysdiagrams"){
        $tableNameList[] .= $row['Name'];   
      } 
    }

    foreach($tableNameList as &$tName){
        $hasDCAEmail = sqlsrv_query($conn,  "SELECT DCAEmail from " . $tName  );
        if($hasDCAEmail){
            $scrub = sqlsrv_query($conn, "UPDATE " . $tName . " SET DCAEmail='test@test.com'");
            if(!$scrub){
                die( print_r( sqlsrv_errors(), true));
            }
        }
    }
}

【问题讨论】:

  • 您要更新多少条记录?
  • 为什么无法查看 SQL SM 2008 中的表?
  • 呃,你真的要在没有 where 子句的情况下更新整个表吗?
  • Chris - 我正在更新大约 1000 条记录。 Raidenance - 我不知道 :) 我尝试刷新数据库,并展开“tables”文件夹。它给了我一个锁定错误(1222)
  • 如果您希望所有电子邮件地址都相同,更简单的答案是删除该列并将该值存储一次,在其他地方。

标签: php sql sql-server select sql-update


【解决方案1】:

多亏了 Raidenance 的帮助,我才弄明白了!完整代码如下。我需要在执行新查询之前提交 sql_srv 查询。

function scrubEmail($conn){
   $tableNameList = array();
   $getTableName = sqlsrv_query($conn, "Select Name FROM sys.tables");
   while($row = sqlsrv_fetch_array($getTableName)){
        if($row['Name'] !== "sysdiagrams"){
            $tableNameList[] .= $row['Name'];   
        }
   }

    foreach($tableNameList as &$tabName){
        if ( sqlsrv_begin_transaction( $conn ) === false ) {
            die( print_r( sqlsrv_errors(), true ));
        }
        $hasFIELD = sqlsrv_query($conn,  "SELECT COLUMNNAME from " . $tabName  );
        if($hasFIELD){
        }
        else {
            sqlsrv_rollback( $conn );
            echo "hasFIELD Transaction rolled back.<br />";
        }

        while($row = sqlsrv_fetch_array($hasDCAEmail)){
            $scrub = sqlsrv_query($conn, "UPDATE " . $tabName . " SET COLUMN='test@test.edu'");
            if($scrub){     
                sqlsrv_commit( $conn );
                echo "Transaction committed.<br />";
            }
            else {
                sqlsrv_rollback( $conn );
                echo "Transaction rolled back.<br />";
            }           
        }
    } 
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多