【发布时间】:2010-09-20 23:21:29
【问题描述】:
我在 MS SQL 存储过程中旋转数据。旋转的列是使用存储过程参数动态创建的(例如:“location1,location2,location3”),因此将生成的列数是未知的。输出应如下所示(位置取自存储过程参数):
下单时间 |位置1 |位置2 | 位置3
这可以在 LINQ to SQL 中使用吗?当我将此过程拖到 dbml 文件时,它显示此过程返回 int 类型。
我在log_sales 表中使用的列是:
- 位置(我正在旋转的各个位置),
- 收费(金额)
- 下单时间
存储过程:
CREATE PROCEDURE [dbo].[proc_StatsDay] @columns NVARCHAR(64) AS
DECLARE @SQL_PVT1 NVARCHAR(512), @SQL_PVT2 NVARCHAR(512), @SQL_FULL NVARCHAR(4000);
SET @SQL_PVT1 = 'SELECT OrderTime, ' + LEFT(@columns,LEN(@columns)-1) +'
FROM (SELECT ES.Location, CONVERT(varchar(10), ES.OrderTime, 120),ES.Charge
FROM dbo.log_sales ES
) AS D (Location,OrderTime,Charge)
PIVOT (SUM (D.Charge) FOR D.Location IN
(';
SET @SQL_PVT2 = ') )AS PVT
ORDER BY OrderTime DESC';
SET @SQL_FULL = @SQL_PVT1 + LEFT(@columns,LEN(@columns)-1) +
@SQL_PVT2;
EXEC sp_executesql @SQL_FULL, N'@columns NVARCHAR(64)',@columns = @columns
在 dbml designer.cs 文件中我的存储过程部分代码:
[Function(Name="dbo.proc_StatsDay")]
public int proc_EasyDay([Parameter(DbType="NVarChar(64)")] string columns)
{
IExecuteResult result = this.ExecuteMethodCall(this,((MethodInfo)MethodInfo.GetCurrentMethod())), columns);
return ((int)(result.ReturnValue));
}
【问题讨论】:
标签: sql linq stored-procedures pivot