--- datadict-mssqlnative.inc.orig.php	2011-09-08 13:59:32.000000000 +0200
+++ datadict-mssqlnative.inc.php	2012-01-08 16:18:53.251672800 +0100
@@ -121,19 +121,66 @@
 		return $sql;
 	}
 	
-	/*
 	function AlterColumnSQL($tabname, $flds)
 	{
-		$tabname = $this->TableName ($tabname);
+		$tabname = $this->TableName($tabname);
 		$sql = array();
 		list($lines,$pkey) = $this->_GenFields($flds);
+
 		foreach($lines as $v) {
-			$sql[] = "ALTER TABLE $tabname $this->alterCol $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 "<pre>";
+		print_r($sql);
+		echo "</pre><br>";
+*/
 		return $sql;
 	}
-	*/
 	
 	function DropColumnSQL($tabname, $flds)
 	{
@@ -143,12 +190,59 @@
 		$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 "<pre>";
+		print_r($sql);
+		echo "</pre><br>";
+*/
 		return $sql;
 	}
+
+	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['name'];
+					// Remove default value
+					$strSql = "ALTER TABLE $tabname DROP CONSTRAINT $defName";
+				}
+			
+			$oRs->Close();
+		};
+/*
+		echo "<pre>";
+		print_r($strSql);
+		echo "</pre><br>";
+*/
+		return $strSql;
+	}
 	
 	// return string must begin with space
 	function _CreateSuffix($fname,&$ftype,$fnotnull,$fdefault,$fautoinc,$fconstraint,$funsigned)
