求助,sqlserver2005存储过程如何返回这样的结果集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助,sqlserver2005存储过程如何返回这样的结果集相关的知识,希望对你有一定的参考价值。

参考技术A   部署CLR存储过程
  上面的示例代码需要进行编译才能通过存储过程来调用。在命令行中执行下面的命令来编译这些代码并创建类库DLL MSSQLTipsCLRLib.dll: 
CSC/target:libraryStoredProcedures.cs/out:MSSQLTipsCLRLib.dll
  假设你使用的是Microsoft .NET框架的第二版本,那么你可以在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下看到CSC.EXE。
  执行下面的T-SQL脚本来创建这个存储过程: 
ALTERDATABASEmssqltips
  SETTRUSTWORTHYON  GO  USEmssqltips  GO  CREATEASSEMBLYMSSQLTipsCLRLib
  FROM'C:\mssqltips\MSSQLTipsCLRLib.dll'
  WITHPERMISSION_SET=EXTERNAL_ACCESS  GO  CREATEPROCEDUREdbo.GetListOfFiles
  @pathNVARCHAR(256)
  ,@patternNVARCHAR(64)
  ,@recursiveBIT  AS  EXTERNALNAMEMSSQLTipsCLRLib.StoredProcedures.GetListOfFiles
  在编译了这个代码到类库(.dll)之后,CREATE ASSEMBLY命令就被执行了,它将这个DLL与ASSEMBLY数据库对象关联起来。FROM条件从句必须指向DLL的实际路径。PERMISSION_SET必须设置为EXTERNAL_ACCESS,因为.NET代码将访问SQL Server 之外的文件系统。TRUSTWORTHY选项被设置为on,以允许外部访问。最后,CREATE PROCEDURE命令的EXTERNAME NAME将这个集合、类和函数与这个存储过程名称关联起来。
  要执行这个存储过程,执行下面的脚本:
EXECdbo.GetListOfFiles'C:\mssqltips','*.*',0
    你将看到类似于下面的输出,这取决于你选择的文件夹的内容;例如,一个只有一列、每一行是一个文件的结果集:  图2  接下来的步骤
  在这里下载示例脚本并执行从一个CLR存储过程返回结果集。
  记住,当在Microsoft .NET框架中有满足你需求的函数时,使用SQL Server的CLR可能是个很好的解决方法。

sqlserver 存储过程 返回结果集的 例子

本人不会在 sqlserver 存储过程 返回结果集 ,请大家指教如何写这样的存储过程。
能给出代码的例子吗?
我明白,主要是不知道怎么写

返回结果集不用Output,直接Select出来的结果集就能返回
在应用程序或网页程序中用你调用存储过程的这个对象像普通记录集一个调用就好了
如果是在查询分析器中执行,可以在下面的“网格”中直接看到返回的这个结果集
参考技术A SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE AIR_RPT_Report5
( @Year varchar(10)= '2008',
@Month Varchar(10)= '03' ,
@SQLWhere VARCHAR(2000)
)
AS
BEGIN

EXEC('SELECT IB_ID,''AIR'' AS SYSTEMID,
sum(case when RP_INDICATOR=''R'' AND CUR_ID IN(''USD'',''CNY'',''EUR'',''GBP'') then ISNULL(AMT,0) else 0 end ) as AMT_R,
sum(case when RP_INDICATOR=''P'' AND CUR_ID IN(''USD'',''CNY'',''EUR'',''GBP'') then ISNULL(AMT,0) else 0 end ) as AMT_P,
sum(case when CUR_ID=''USD'' AND RP_INDICATOR=''R'' then BLAMT else 0 end ) as AMT_R_USD,
sum(case when CUR_ID=''USD'' AND RP_INDICATOR=''P'' then BLAMT else 0 end ) as AMT_P_USD,
sum(case when CUR_ID=''USD'' AND RP_INDICATOR=''R'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_R_USD_AG,
sum(case when CUR_ID=''USD'' AND RP_INDICATOR=''P'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_P_USD_AG,
sum(case when CUR_ID=''EUR'' AND RP_INDICATOR=''R'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_R_EUR,
sum(case when CUR_ID=''EUR'' AND RP_INDICATOR=''P'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_P_EUR,
sum(case when CUR_ID=''GBP'' AND RP_INDICATOR=''R'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_R_GBP,
sum(case when CUR_ID=''GBP'' AND RP_INDICATOR=''P'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_P_GBP,
sum(case when CUR_ID=''CNY'' AND RP_INDICATOR=''R'' AND ARP_TYPE<>''AG'' then AMT else 0 end ) as AMT_R_CNY,
sum(case when CUR_ID=''CNY'' AND RP_INDICATOR=''P'' AND ARP_TYPE<>''AG'' then AMT else 0 end ) as AMT_P_CNY,
sum(case when RP_INDICATOR=''R'' AND CUR_ID IN(''USD'',''CNY'',''EUR'',''GBP'') then ISNULL(AMT,0) else 0 end )-
sum(case when RP_INDICATOR=''P'' AND CUR_ID IN(''USD'',''CNY'',''EUR'',''GBP'') then ISNULL(AMT,0) else 0 end ) as AMT_Profit
FROM
( SELECT SUM(AMOUNT) AS BLAMT,SUM(BASE_CUR_AMOUNT) AS AMT,A.CUR_ID,ARP_TYPE,RP_INDICATOR,IB_ID
FROM RP_FRT A
JOIN AIR_BL_PLAN B ON A.BL_ID=B.BL_ID
WHERE BL_TYPE<>''总单'' AND Year(A.INPUT_DATE)='+@Year+' AND month(A.INPUT_DATE)='+@Month +@SQLWhere+
'GROUP BY IB_ID,A.CUR_ID,RP_INDICATOR,ARP_TYPE
) AS B
GROUP BY IB_ID
UNION
SELECT IB_ID,''OCEAN'' AS SYSTEMID,
sum(case when RP_INDICATOR=''R'' AND CUR_ID IN(''USD'',''CNY'',''EUR'',''GBP'') then ISNULL(AMT,0) else 0 end ) as AMT_R,
sum(case when RP_INDICATOR=''P'' AND CUR_ID IN(''USD'',''CNY'',''EUR'',''GBP'') then ISNULL(AMT,0) else 0 end ) as AMT_P,
sum(case when CUR_ID=''USD'' AND RP_INDICATOR=''R'' then BLAMT else 0 end ) as AMT_R_USD,
sum(case when CUR_ID=''USD'' AND RP_INDICATOR=''P'' then BLAMT else 0 end ) as AMT_P_USD,
sum(case when CUR_ID=''USD'' AND RP_INDICATOR=''R'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_R_USD_AG,
sum(case when CUR_ID=''USD'' AND RP_INDICATOR=''P'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_P_USD_AG,
sum(case when CUR_ID=''EUR'' AND RP_INDICATOR=''R'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_R_EUR,
sum(case when CUR_ID=''EUR'' AND RP_INDICATOR=''P'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_P_EUR,
sum(case when CUR_ID=''GBP'' AND RP_INDICATOR=''R'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_R_GBP,
sum(case when CUR_ID=''GBP'' AND RP_INDICATOR=''P'' AND ARP_TYPE=''AG'' then BLAMT else 0 end ) as AMT_P_GBP,
sum(case when CUR_ID=''CNY'' AND RP_INDICATOR=''R'' AND ARP_TYPE<>''AG'' then AMT else 0 end ) as AMT_R_CNY,
sum(case when CUR_ID=''CNY'' AND RP_INDICATOR=''P'' AND ARP_TYPE<>''AG'' then AMT else 0 end ) as AMT_P_CNY,
sum(case when RP_INDICATOR=''R'' AND CUR_ID IN(''USD'',''CNY'',''EUR'',''GBP'') then ISNULL(AMT,0) else 0 end )-
sum(case when RP_INDICATOR=''P'' AND CUR_ID IN(''USD'',''CNY'',''EUR'',''GBP'') then ISNULL(AMT,0) else 0 end ) as AMT_Profit
FROM
( SELECT SUM(AMOUNT) AS BLAMT,SUM(BASE_CUR_AMOUNT) AS AMT,A.CUR_ID,ARP_TYPE,RP_INDICATOR,IB_ID
FROM RP_FRT A
JOIN OC_BL_PLAN B ON A.BL_ID=B.BL_ID
WHERE BL_TYPE<>''MBL'' AND Year(A.INPUT_DATE)='+@Year+' AND month(A.INPUT_DATE)='+@Month +@SQLWhere+
'GROUP BY IB_ID,A.CUR_ID,RP_INDICATOR,ARP_TYPE
) AS B
GROUP BY IB_ID')

END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

满意了吗
其实很简单,就是SELECT

以上是关于求助,sqlserver2005存储过程如何返回这样的结果集的主要内容,如果未能解决你的问题,请参考以下文章

sqlserver 2005中存储过程中的语法问题

如何返回sqlserver 中存储过程的select的结果集

如何使sqlserver存储过程返回varchar

SQL Server 2005 使用 GETDATE() 作为参数通过 SSIS 运行存储过程

SQL Server 2005 中的内置数据库角色允许执行存储过程?

关于jdbc调用存储过程的问题