在视图后面获取sql语句

时间:2010-12-02 06:57:46

标签: c# sql

我有一个c#application(2008)从sql server(2005)获取数据。 我在sql server中有一个用于准备显示数据的视图,如下所示(简化):

select Places.Name as [Location], Parts.Name as [Part Name]
from  Places inner join Parts 
on Places.Id=Parts.Location

我必须使用代码中构建的“where”语句对其进行过滤,如下所示:

where (Places.Id=1 or Places.Id=15) and 
      (Parts.Id=56 or Parts.Id=8 or Parts.Id=32)

我当然可以在我的代码中保留基本的select语句,但我喜欢只在一个地方定义的东西:)而且问题是如果有任何方法在sql server中获取视图后面的select语句?或者获取存储过程的内容? 非常感谢!

3 个答案:

答案 0 :(得分:1)

看看Information Schema View,您可能会找到解决方案。

答案 1 :(得分:0)

使用信息架构视图作为jani建议是一种选择。

另一个是使用sp_helptext系统存储过程。 sp_helptext YourViewsp_helptext YourStoredProcedure为您提供整个对象定义。

您可以找到有关at sp_helptext系统存储过程here的更多信息。

答案 2 :(得分:0)

如果您希望存储过程执行查询(并将基本查询字符串与where子句组合在一起),则可以使用以下代码完成此操作:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    string selectCommand = "EXEC sp_YourStoredProcedure @whereClause";

    SqlCommand command = new SqlCommand(selectCommand, connection);
    command.Parameters.Add("@whereClause", System.Data.SqlDbType.NVarChar);
    command.Parameters["@whereClause"] = whereClause;
    using (SqlDataReader reader = command.ExecuteReader())
    {
        while (reader.NextResult())
        {
            string location = reader.GetString(0);
            string partName = reader.GetString(1);

            // do something
        }
    }

    connection.Close();
}

编辑:动态存储过程示例:

CREATE PROCEDURE sp_YourStoredProcedure
(
    @whereClause NVARCHAR(MAX)
)
AS
BEGIN
    DECLARE @sql AS NVARCHAR(MAX)

    SET @sql = N'
    select Places.Name as [Location], Parts.Name as [Part Name] 
    from  Places inner join Parts  
    on Places.Id=Parts.Location '
    + @whereClause

     EXEC sp_executesql @sql
END