// Add this as last function in datadict-mssqlnative.inc.php or datadict-mssql.inc.php function DropDefaultValue($tabname, $fieldname) { $strSql = ""; // delete default value if exists if( $this->connection->IsConnected() ) { $oRs = $this->connection->Execute(' SELECT name FROM sysobjects so JOIN sysconstraints sc ON so.id = sc.constid WHERE object_name(so.parent_obj) = \'' . $tabname . '\' AND so.xtype = \'D\' AND sc.colid = ( SELECT colid FROM syscolumns WHERE id = object_id(\'' . $tabname . '\') AND name = \'' . $fieldname . '\' ) '); if( $oRs ) if(!$oRs->EOF) { $defName = $oRs->fields[0]; // Remove default value $strSql = "ALTER TABLE $tabname DROP CONSTRAINT $defName"; } $oRs->Close(); }; //echo "
DropDefaultValue: " . $strSql . "
"; return $strSql; } // Change those methods function AlterColumnSQL($tabname, $flds) { $tabname = $this->TableName($tabname); $sql = array(); list($lines,$pkey) = $this->_GenFields($flds); foreach($lines as $v) { // get field name and type $arTmp = array(); $arTmp = preg_split("/[\s]+/", $v); $arCnt = count($arTmp); $fieldname = $arTmp[0]; $fieldtype = $arTmp[1]; $bHasDef = false; $bIsNull = true; for($i = 2; $i < $arCnt; $i++) { // get default value if( trim($arTmp[$i]) == "DEFAULT" ) { $bHasDef = true; if( $i+1 <= $arCnt ) { $field_def = $arTmp[$i+1]; } } // get nullability if( trim($arTmp[$i]) == "NOTNULL" ) $bIsNull = false; } // delete default value if exists $strDropDef = $this->DropDefaultValue($tabname, $fieldname); if( trim($strDropDef) !== "" ) $sql[] = $strDropDef; if($bHasDef) { // change type and nulls if($bIsNull) $sql[] = "ALTER TABLE $tabname $this->alterCol $fieldname $fieldtype NOT NULL"; else $sql[] = "ALTER TABLE $tabname$this->alterCol $fieldname $fieldtype"; // Add default value $sql[] = "ALTER TABLE $tabname ADD CONSTRAINT def_" . $tabname . "_" . $fieldname . " DEFAULT " . $field_def . " FOR $fieldname"; } else { $sql[] = "ALTER TABLE $tabname $this->alterCol $v"; } } /* echo "
";
		print_r($sql);
		echo "

"; */ return $sql; } function DropColumnSQL($tabname, $flds) { $tabname = $this->TableName ($tabname); if (!is_array($flds)) $flds = explode(',',$flds); $f = array(); $s = 'ALTER TABLE ' . $tabname; foreach($flds as $v) { // delete default value if exists $strDropDef = $this->DropDefaultValue($tabname, $v); if( trim($strDropDef) !== "" ) $sql[] = $strDropDef; $f[] = "\n$this->dropCol ".$this->NameQuote($v); } $s .= implode(', ',$f); $sql[] = $s; /* echo "
";
		print_r($sql);
		echo "

"; */ return $sql; }