现在的位置: 首页 > 综合 > 正文

php 5.3.8版本,针对sql server 2008的注释编辑查看工具程序

2013年09月16日 ⁄ 综合 ⁄ 共 4283字 ⁄ 字号 评论关闭

最近做一个项目, 用的是php 5.3.8, 数据库是sql server 2008,

sql server的管理器,针对每个字段的东西很多,写个注释都要拉滚动条,每写一个得拉一下,非常麻烦.

所以写了一个程序,通过网页列出表和字段,直接可以在网页上写注释,方便多了

 

 

<?php

/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"zfdb2",'uid'=>'sa','pwd'=>'20100612');
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
     echo "Could not connect.\n";
     die( print_r( sqlsrv_errors(), true));
}
if($_POST)
{
	$sql="EXECUTE sp_updateextendedproperty N'MS_Description', N'".$_POST['desc']."', N'SCHEMA', N'dbo', N'TABLE', N'".$_POST['table']."', N'COLUMN', N'".$_POST['col']."'";	
	sqlsrv_query( $conn, $sql);	
	$sql="EXECUTE sp_addextendedproperty N'MS_Description', N'".$_POST['desc']."', N'SCHEMA', N'dbo', N'TABLE', N'".$_POST['table']."', N'COLUMN', N'".$_POST['col']."'";
	sqlsrv_query( $conn, $sql);
	die( print_r( sqlsrv_errors(), true));
}
echo '<iframe name="p" style="display:none"></iframe>';
/* Set up and execute the query. */
$tsql = 'select name from sysobjects where type=\'U\'';
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false)
{
     echo "Error in query preparation/execution.\n";
     die( print_r( sqlsrv_errors(), true));
}

/* Retrieve each row as an associative array and display the results.*/
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
{
	if($row['name']=='dtproperties') continue;
	//echo $row['name']."<hr>";
	$sql1="SELECT 
    --TableName=CASE WHEN C.column_id=1 THEN O.name ELSE N'' END,
    --TableDesc=CONVERT(VARCHAR, ISNULL(CASE WHEN C.column_id=1 THEN PTB.[value] END,N'')),
    字段id=C.column_id,
    字段名称=C.name,
    是否主键=CONVERT(VARCHAR,ISNULL(IDX.PrimaryKey,N'')),
    [IDENTITY]=CASE WHEN C.is_identity=1 THEN N'Y'ELSE N'' END,
    --Computed=CASE WHEN C.is_computed=1 THEN N'Y'ELSE N'' END,
    类型=T.name,
    长度=C.max_length,
    --Precision=C.precision,
    --Scale=C.scale,
    是否可以为空=CASE WHEN C.is_nullable=1 THEN N'Y'ELSE N'' END,
    默认值=CONVERT(VARCHAR,ISNULL(D.definition,N'')),
    描述=CONVERT(VARCHAR,ISNULL(PFD.[value],N''))
    --,IndexName=CONVERT(VARCHAR,ISNULL(IDX.IndexName,N'')),
    --IndexSort=CONVERT(VARCHAR,ISNULL(IDX.Sort,N''))
  -- , Create_Date=O.Create_Date,
  --  Modify_Date=O.Modify_date
FROM sys.columns C
    INNER JOIN sys.objects O
        ON C.[object_id]=O.[object_id]
            AND O.type='U'
            AND O.is_ms_shipped=0
    INNER JOIN sys.types T
        ON C.user_type_id=T.user_type_id
    LEFT JOIN sys.default_constraints D
        ON C.[object_id]=D.parent_object_id
            AND C.column_id=D.parent_column_id
            AND C.default_object_id=D.[object_id]
    LEFT JOIN sys.extended_properties PFD
        ON PFD.class=1 
            AND C.[object_id]=PFD.major_id 
            AND C.column_id=PFD.minor_id

    LEFT JOIN sys.extended_properties PTB
        ON PTB.class=1 
            AND PTB.minor_id=0 
            AND C.[object_id]=PTB.major_id

    LEFT JOIN    
    (
        SELECT 
            IDXC.[object_id],
            IDXC.column_id,
            Sort=CASE INDEXKEY_PROPERTY(IDXC.[object_id],IDXC.index_id,IDXC.index_column_id,'IsDescending')
                WHEN 1 THEN 'DESC' WHEN 0 THEN 'ASC' ELSE '' END,
            PrimaryKey=CASE WHEN IDX.is_primary_key=1 THEN N'Y'ELSE N'' END,
            IndexName=IDX.Name
        FROM sys.indexes IDX
        INNER JOIN sys.index_columns IDXC
            ON IDX.[object_id]=IDXC.[object_id]
                AND IDX.index_id=IDXC.index_id
        LEFT JOIN sys.key_constraints KC
            ON IDX.[object_id]=KC.[parent_object_id]
                AND IDX.index_id=KC.unique_index_id
        INNER JOIN
        (
            SELECT [object_id], Column_id, index_id=MIN(index_id)
            FROM sys.index_columns
            GROUP BY [object_id], Column_id
        ) IDXCUQ
            ON IDXC.[object_id]=IDXCUQ.[object_id]
                AND IDXC.Column_id=IDXCUQ.Column_id
                AND IDXC.index_id=IDXCUQ.index_id
    ) IDX
        ON C.[object_id]=IDX.[object_id]
            AND C.column_id=IDX.column_id 
WHERE O.name=N'".$row['name']."' 
ORDER BY O.name,C.column_id;";
	$stmt1 = sqlsrv_query( $conn,$sql1);
	
	$i=0;
	echo '<table>';
	while( $c = sqlsrv_fetch_array( $stmt1, SQLSRV_FETCH_ASSOC))
	{
		if($i==0)
		{
			echo '<tr bgcolor="#336633" style="color:#ffffff">';
			echo '<td colspan="'.count($c).'">  '.$row['name'].'  </td>';
			echo '</tr>';
			echo '<tr bgcolor="#006699" style="color:#ffffff">';
			foreach($c as $n=>$v)
			{
				echo '<td>  '.$n.'  </td>';
			}
			echo (isset($_GET['view'])?'':'<td></td>');
			echo '</tr>';
		}
		$i++;
		echo '<tr bgcolor="#'.($i%2==1?'FCFFD2':'D6D6CF').'">'.(isset($_GET['view'])?'':'<form method="post" target="p"><input type="hidden" name="table" value="'.$row['name'].'"><input type="hidden" name="col" value="'.$c['ColumnName'].'">');
		foreach($c as $n=>$v)
		{
			if($n=='ColumnDesc'&&!isset($_GET['view']))
				echo '<td><input type="text" name="desc" value="'.$v.'"></td>';
			else
				echo '<td>'.$v.'</td>';
		}
		if(!isset($_GET['view'])) echo '<td><input type="submit"></td>';
		echo (isset($_GET['view'])?'':'</form>').'</tr>';
	}
	echo '</table>';
}

/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>

抱歉!评论已关闭.