存储过程中的代码如下:
create proc SP_testMAOSB
(
@where nvarchar(max)='-1'
)
as
create table #a
(
machine nvarchar(500) null,
DURATION nvarchar(500) null
)
declare @sql nvarchar(max)
set @sql='insert into #a(machine,DURATION) '
set @sql=@sql+' SELECT
(dbo.T_SFC_DOWNTIME_CODE.DOWNTIME_CODE_NUMBER + ''—'' + ISNULL(dbo.T_SFC_DOWNTIME_CODE.DOWNTIME_CODE_NAME, '''')) AS ''machine'',
cast (SUM(dbo.T_SFC_DT_PER_MACHINE_DATA.DURATION) AS varchar(100)) AS ''DURATION''
FROM dbo.T_SFC_DOWNTIME_CODE INNER JOIN dbo.T_SFC_DT_PER_MACHINE_DATA ON
dbo.T_SFC_DOWNTIME_CODE.DOWNTIME_CODE_ID = dbo.T_SFC_DT_PER_MACHINE_DATA.DOWNTIME_CODE_ID INNER JOIN
dbo.T_SFC_MACHINE_DATA ON
dbo.T_SFC_DT_PER_MACHINE_DATA.MACHINE_DATA_ID = dbo.T_SFC_MACHINE_DATA.MACHINE_DATA_ID INNER JOIN
dbo.T_SFC_MACHINE ON dbo.T_SFC_MACHINE_DATA.MACHINE_ID = dbo.T_SFC_MACHINE.MACHINE_ID '
if(@where<>'-1')
begin
set @sql=@sql+' '+@where;
end
set @sql=@sql+' group by (dbo.T_SFC_DOWNTIME_CODE.DOWNTIME_CODE_NUMBER + ''—'' + ISNULL(dbo.T_SFC_DOWNTIME_CODE.DOWNTIME_CODE_NAME, ''''))';
print (@sql)
exec(@sql)
该存储过程在VS里面有参数的传递
SP_testMAOSB '"+str+"'
string str=" where dbo.T_SFC_DT_PER_MACHINE_DATA.START_TIME between'" +dt1 + "' and '" + dt2+ " ' ";
if ( nu != "")
{
str += " and dbo.T_SFC_MACHINE.MACHINE_NUMBER='" +nu + "' ";
}
存储过程反馈出来的是一段SQL语句。现在希望能够通过调用这个存储过程,执行其SQL语句
并通过 select machine, DURATION from #a
查询数据并反馈到VS中! 求教育 求解决!!!
------解决方案--------------------
你新建一个存储过程,在VS中调用就好。
#a是临时表,你可以在session终止之前,随时调用这个表的。表变量就不行。
------解决方案--------------------
我想说:
最好把临时表的声明也放到拼接语句里面
这样可以保证临时表的声明周期和拼接语句的生命周期相同
另外 临时表只限在本次存储执行过程中存在
也就意味着 select machine, DURATION from #a需要放到存储过程的末尾执行
这样 存储过程最终返回一个数据集而不是字符串