注册 登录
编程论坛 SQL Server论坛

存储过程调用的问题

happynight 发布于 2008-11-07 13:38, 799 次点击
在查询分析器中执行存储过程能正确返回数据,但是在前台调用的时候无法返回数据
--------------------
存储过程部分代码如下:
CREATE  Procedure BuildTimeRecords(......)
AS

CREATE TABLE [#TimeRecords] (
        [emp_id] [nvarchar] (12) COLLATE Chinese_PRC_CI_AS NULL ,
        [Clock_id] [nvarchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
        [CurrentDay] [datetime] NULL,
        [Card_id] [nvarchar] (16) COLLATE Chinese_PRC_CI_AS NOT NULL ,
        [flag] [tinyint] NULL ,
        [mark] [varchar] (2) COLLATE Chinese_PRC_CI_AS NULL ,
        [sign_time] [datetime] NULL ,
        [pass_kind] [varchar] (1) COLLATE Chinese_PRC_CI_AS NOT NULL
)

.......................

IF @ReturnType=0
  .......
ELSE
  BEGIN
        
        SELECT #TimeRecords.emp_id,employee.emp_fname,#TimeRecords.CurrentDay,a.cu,
               MAX(CASE mark WHEN 0 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [0],
               MAX(CASE mark WHEN 1 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [1],
               MAX(CASE mark WHEN 2 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [2],
               MAX(CASE mark WHEN 3 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [3],
               MAX(CASE mark WHEN 4 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [4],
               MAX(CASE mark WHEN 5 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [5],
               MAX(CASE mark WHEN 6 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [6],
               MAX(CASE mark WHEN 7 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [7],
               MAX(CASE mark WHEN 8 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [8],
               MAX(CASE mark WHEN 9 THEN   CONVERT (VARCHAR(8),sign_time,108)  END) AS [9],
               pass_kind
        FROM #TimeRecords
             INNER JOIN (SELECT emp_id,CurrentDay,Count(*) cu FROM #TimeRecords
                         GROUP BY emp_id,CurrentDay ) a
             ON a.emp_id=#TimeRecords.emp_id AND #TimeRecords.CurrentDay=a.CurrentDay
             INNER JOIN employee ON #TimeRecords.emp_id=employee.emp_id
        GROUP BY #TimeRecords.emp_id,#TimeRecords.CurrentDay,#TimeRecords.pass_kind,a.cu,employee.emp_fname
        ORDER BY #TimeRecords.emp_id,#TimeRecords.CurrentDay
  END
  Drop Table #TimeRecords
GO
--------------------------
按照以前遇到的情况 是因为没有删除临时表造成的 现在加了删除临时表 但问题仍照旧
4 回复
#2
西风独自凉2008-11-07 13:50
使用rs 得到其記錄
#3
happynight2008-11-07 14:05
[bo][un]西风独自凉[/un] 在 2008-11-7 13:50 的发言:[/bo]

使用rs 得到其記錄

你是说使用RecordSet吗 就是使用了这个也没有得到数据
#4
happynight2008-11-07 14:26
找到解决的办法了 很久前就遇到过 但是忘记了
"在ADO中调用存储过程时,一定要在存储过程的第一行加上set   nocount   on,如果在存储过程中使用了EXEC   sp_executesql   @sql则@sql这个字符串也必须在开头加上set   nocount   on.
set   nocount   on   的作用是禁止回显,当使用ado时该回显会被认为是错误(但并不抛出异常),所以导致recordset对象被关闭."
#5
西风独自凉2008-11-07 15:48
1