我有一个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语句?或者获取存储过程的内容? 非常感谢!
答案 0 :(得分:1)
看看Information Schema View,您可能会找到解决方案。
答案 1 :(得分:0)
使用信息架构视图作为jani建议是一种选择。
另一个是使用sp_helptext系统存储过程。 sp_helptext YourView
或sp_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