关于临时表

kingdom_0 2012-04-20 05:27:33
背景:Silverlight项目,通过WCF连接数据库,调用存储过程获取数据。
具体proc:
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('up_RetrieveIDC_V2','P') IS NOT NULL
DROP PROCEDURE up_RetrieveIDC_V2
GO
CREATE PROCEDURE [dbo].[up_RetrieveIDC_V2]
@NAME NVARCHAR(200),
@BANDWIDTH_TYPE INT,
@STATE INT
AS
BEGIN

DECLARE @SQL VARCHAR(1000);

/*创建临时表*/
SELECT IDC_ID,COUNT(ID) AS CABINET_COUNT INTO ##TBL_CABINET_COUNT FROM IDC_CABINET GROUP BY IDC_ID

/*拼接SQL*/
SET @SQL= ' SELECT
C.IDC_ID,C.NAME,C.LOCATION,
C.BANDWIDTH_TOTAL,B.[TYPE_NAME],
SP.SP_NAME,TCC.CABINET_COUNT AS Cabinet_Count,
SP.BIZ_MAN,SP.BIZ_TEL,
C.TECH_MAN,C.TECH_MAN_TEL,S.STATE_NAME,C.REMARK,C.IDC_TEL,C.CABINET_PRICE,C.BANDWIDTH_PRICE
FROM IDC AS C
LEFT JOIN IDC_STATE AS S ON C.IDC_STATE=S.STATE_ID
LEFT JOIN BANDWIDTH_TYPE AS B ON C.BANDWIDTH_TYPE=B.TYPE_ID
LEFT JOIN IDC_SP AS SP ON C.SP_ID=SP.SP_ID
LEFT JOIN ##TBL_CABINET_COUNT AS TCC ON TCC.IDC_ID=C.IDC_ID WHERE 1=1 '
IF(@NAME<>'' AND @NAME IS NOT NULL)
SET @SQL=@SQL+' AND NAME LIKE ''%'+@NAME+'%'''
IF(@BANDWIDTH_TYPE<>'' AND @BANDWIDTH_TYPE IS NOT NULL)
SET @SQL=@SQL+' AND BANDWIDTH_TYPE='+CONVERT(VARCHAR(30),@BANDWIDTH_TYPE)+' '
IF(@STATE<>'' AND @STATE IS NOT NULL)
SET @SQL=@SQL+' AND IDC_STATE='+CONVERT(VARCHAR(30),@STATE)+' '
SET @SQL=@SQL+' ORDER BY C.IDC_ID DESC'
PRINT @SQL
EXEC(@SQL)
DROP TABLE ##TBL_CABINET_COUNT
END

问题:数据库中直接执行proc没有问题,能正常返回结果集,但是在程序中返回的结果集一直都是null,求指导。
...全文
163 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
凌风逝水 2013-06-21
  • 打赏
  • 举报
回复
楼主,你如何解决的,我现在也遇到有临时表的返回是null的
kingdom_0 2012-04-24
  • 打赏
  • 举报
回复
问题解决了,感谢各位热心帮助,结贴。
kingdom_0 2012-04-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

目测存储过程没有问题,建议把##TBL_CABINET_COUNT 改成#TBL_CABINET_COUNT

接收不到是不是程序的问题,把存储过程内容改成一个select 语句看可以不
[/Quote]
原来的临时表:#TBL_CABINET_COUNT ,由于在程序中取不能数据,又用##TBL_CABINET_COUNT测试的
kingdom_0 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

试一次 不删除全局临时表试试,看看能取到什么结果。
-- DROP TABLE ##TBL_CABINET_COUNT
[/Quote]
程序拿到的结果还是null
simonxt 2012-04-20
  • 打赏
  • 举报
回复
试一次 不删除全局临时表试试,看看能取到什么结果。
-- DROP TABLE ##TBL_CABINET_COUNT
kingdom_0 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

目测存储过程没有问题,建议把##TBL_CABINET_COUNT 改成#TBL_CABINET_COUNT

接收不到是不是程序的问题,把存储过程内容改成一个select 语句看可以不
[/Quote]
如果不使用临时表,没有问题,程序可以拿到结果集。
kingdom_0 2012-04-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

SQL code

AS
BEGIN
SET NOCOUNT ON -- Try !
DECLARE @SQL VARCHAR(1000);

/*创建临时表*/
SELECT IDC_ID,COUNT(ID) AS CABINET_COUNT INTO ##TBL_CABINET_COUNT FROM IDC_CABINET GROUP BY IDC_ID……
[/Quote]问题依旧。
黄_瓜 2012-04-20
  • 打赏
  • 举报
回复
如一楼所示加上 set nocount on 试试

这个本身就是个好习惯。
黄_瓜 2012-04-20
  • 打赏
  • 举报
回复
目测存储过程没有问题,建议把##TBL_CABINET_COUNT 改成#TBL_CABINET_COUNT

接收不到是不是程序的问题,把存储过程内容改成一个select 语句看可以不
AcHerat 元老 2012-04-20
  • 打赏
  • 举报
回复

AS
BEGIN
SET NOCOUNT ON -- Try !
DECLARE @SQL VARCHAR(1000);

/*创建临时表*/
SELECT IDC_ID,COUNT(ID) AS CABINET_COUNT INTO ##TBL_CABINET_COUNT FROM IDC_CABINET GROUP BY IDC_ID

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧