桂林网站建设
您的位置: 首页> SQL

我要叫喊

学习本类知识需要注意某些知识点,它们之间有些关联

      技术文档
      本站业务
      本类热点
  1. sql日期函数,sq...
  2. 根据字段值查字...
  3. 经典SQL语句集...
  4. 存储过程中的to...
  5. 修正过的通用分...
  6. SQL精妙语句
  7. Transact_SQL小手...
  8. Sql Server基本函...
  9. SQL Server 2000中...
  10. SQL Server存储...
根据字段值查字段名和表名,根据字段查询表名,sql server 2000


如何根据字段查询出拥有该字段的表名。在实际应用中碰到这种问题的情况很多。下面就介绍一下方法。
还是以浪潮gs5为例。系统登陆的时候提示defposid字段无效。这种问题很普遍,也很简单,处理方式如下:
方法一:打开sql server的事件查看器,新建跟踪。重新登陆gs5,报错以后看事件查看器在执行那个语句,这一步需要判断到底是哪个表,判断好以后就可以在企业管理器种增加该字段。
方法二:使用语句直接查找。
use 数据库名
select * from  syscolumns
where name = 'defposid'
在查询结果中我们查找id字段把值放到下边的where条件中
select * from sysobjects
where id=741577680
查询结果中name字段就是我们要找的表名
或者使用系统函数object_name().
select object_name(741577680)
然后在查询的表中添加相应的字段。

取所有“字符类型”的字段名,及表名

select a.name as zdname,b.name as tbname from syscolumns as a inner join sysobjects as b on a.id=b.id where a.xtype    in(175,167,231,239)

text,ntext这样的是不可以参与=比较sql查询的

以下程序的功能是查找字段为:http://www.guilin315.com的字符串相等的字段名和表名
网页:
//display_all_table.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="display_all_table.aspx.cs" Inherits="test_display_all_table" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
        <br />
        &nbsp;&nbsp;<br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></div>
    </form>
</body>
</html>

程序部分:
//display_all_table.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class test_display_all_table : System.Web.UI.Page
{
    string strConn;
    protected void Page_Load(object sender, EventArgs e)
    {
        strConn = System.Configuration.ConfigurationManager.ConnectionStrings["schoolConnectionString"].ConnectionString;

    }

    private void display_all()
    {
        DataTable t = new DataTable();
        string strSQL = "select a.name as zdname,b.name as tbname from syscolumns as a inner join sysobjects as b on a.id=b.id where a.xtype    in(175,167,231,239)";
        using (SqlConnection conn = new SqlConnection(strConn))
        {
            using (SqlCommand cmd = new SqlCommand(strSQL, conn))
            {
                cmd.CommandType = CommandType.Text;
                conn.Open();
                SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                t.Load(dr);
                dr.Close();
            }
        }

        string SQL = "";
        for (int i = 0; i < t.Rows.Count; i++)
        {
            SQL = "select " + t.Rows[i]["zdname"].ToString() + "  from " + t.Rows[i]["tbname"].ToString() + " where " + t.Rows[i]["zdname"].ToString() + " ='admin' ";

            try
            {
                if (ExecuteSqlEx(SQL))
                {
                    Response.Write("表名为:" + t.Rows[i]["tbname"].ToString() + " <br>字段名为:" + t.Rows[i]["zdname"].ToString() + "<br><br>");

                    //break;
                    //Response.End();
                }
            }
            catch (Exception er)
            {
                //Response.Write("总行数为:"+t.Rows.Count+"执行到了" + i + " <br>出错信息:" + er.Message+"<br><br>下一个表为:<br>");
                //Response.Write("表名为:" + t.Rows[i]["tbname"].ToString() + " <br>字段名为:" + t.Rows[i]["zdname"].ToString() + "<br><br>");
                //break;
                //Response.End();
            }
        }
    }


    /// <summary>
    ///执行一条sql语句,返回bool值,判断该记录是否存在
    /// </summary>
    /// <param name="strSQL">要执行的SQL语句,为字符串类型string</param>
    /// <returns>返回执行情况,整形int</returns>
    public bool ExecuteSqlEx(string strSQL)
    {
        SqlConnection myCn = new SqlConnection(strConn);
        SqlCommand myCmd = new SqlCommand(strSQL, myCn);

        try
        {
            myCn.Open();
            SqlDataReader myReader = myCmd.ExecuteReader();

            if (myReader.Read())
            {
                return true;
            }
            else
            {
                return false;
            }
        }
        catch (Exception er)
        {
            throw er;
        }
        finally
        {
            myCmd.Dispose();
            myCn.Close();
        }
    }


    protected void Button1_Click(object sender, EventArgs e)
    {
        display_all();
        Label1.Text = "没找到!";
    }
}