当前位置: 首页 > 面试题库 >

SQL Server:无法访问临时表

钱凌
2023-03-14
问题内容

如何通过此查询创建表值函数?

我需要计算HH:MM开始和结束工作时间之间的时间

当我在SQL中运行该查询时,它将起作用:

DECLARE @USERID int;
SET @USERID = 10

DECLARE @JOBStartDATE DATETIME;
SET @JOBStartDATE = (SELECT StartJOBHoursDATE FROM JOBs WHERE ID=@USERID)


DECLARE @StartTime DATETIME;
DECLARE @JOBDateTime DATETIME;
DECLARE @JOBEvent nvarchar(50);
DECLARE @totalTime int;
SET @totalTime = 0;

SELECT  ROW_NUMBER() OVER(ORDER BY JOBID) AS ROWNUM, JOBDateTime,JOBEvent  INTO #TEMP FROM  JOBsActivityData where JOBID = @USERID and JOBDateTime >= @JOBStartDATE
DECLARE @MaxRownum INT
SET @MaxRownum = (SELECT MAX(RowNum) FROM #TEMP)
DECLARE @Iter INT
SET @Iter = (SELECT MIN(RowNum) FROM #TEMP)

WHILE @Iter <= @MaxRownum
BEGIN
SET @JOBDateTime =(SELECT JOBDateTime FROM #TEMP WHERE RowNum = @Iter)
SET @JOBEvent =(SELECT JOBEvent FROM #TEMP WHERE RowNum = @Iter)
IF(@JOBEvent = 'START')
BEGIN
SET @StartTime =(SELECT JOBDateTime FROM #TEMP WHERE RowNum = @Iter)
END
IF(@JOBEvent = 'END' AND @StartTime IS NOT NULL)
BEGIN
SET @totalTime = @totalTime + (SELECT DATEDIFF(minute,@StartTime,@JOBDateTime))
SET @StartTime = NULL;
END

    SET @Iter = @Iter + 1
END

DROP TABLE #TEMP

SELECT CAST((@totalTime / 60) AS VARCHAR(8)) + ':' + 
       CAST((@totalTime % 60) AS VARCHAR(2)) AS JOBHours

当我尝试创建时出现此错误

无法从函数内部访问临时表。


问题答案:

服务器不允许修改函数中的 任何 表。请改用表变量。

declare @temp table (RowNum int, JOBDateTime DateTime, JOBEvent int)

insert into @temp
  SELECT ROW_NUMBER() OVER(ORDER BY JOBID) AS ROWNUM, 
         JOBDateTime,
         JOBEvent  
    FROM JOBsActivityData 
   where JOBID = @USERID and JOBDateTime >= @JOBStartDATE
...

使用表变量时,无需删除它们。



 类似资料:
  • 问题内容: 我已擦除并安装了该软件,并已按照本教程进行操作,以在新的OS X上启动并运行。第一步是下载MySQL for Mac OS X 10.9(x86,64位),DMG Archive (在10.11上运行)。 ,他们在本教程中建议)。当我完成安装MySQL时,我收到一条消息,内容是: 太奇怪了,我从未见过这样的信息。之后,我通过“首选项窗格”启动了MySQL,然后在终端上使用命令进行下一步

  • 我成功地kerberized了一个测试Hortonworks集群。Ambari为这些服务创建了keytabs,并且它们都已启动。名称编号有HA。备用名称节点启动得快,活动名称节点需要更长得时间。Namenode UI显示一切都是正确的。可以使用Kerberos登录。名称编号为nn1.zim.com和nn2.zim.com 这个配置会有什么问题呢?以hdfs登录,用kinit-kt加载keytab。

  • 问题内容: 我真的很想用Struts2来解决问题- 通过省略部分路径,我可以访问JSP页面。请注意该路径应该包括在内。关键是要看路径中的单词。 这是文件: 我可以通过: 和通过: 请注意,在两个URL中,我都可以删除,为什么? 来源:http: //www.mkyong.com/misc/how-to-use-mkyong- tutorial/ 有人可以看完上面的教程,告诉我怎么了吗? 问题答案:

  • 我无法访问 尝试的网址:localhost/htdocs 本地主机:80/htdocs IP: 80/htdocs 总是同样的错误 错误: 未找到对象! 在此服务器上找不到请求的URL。如果您手动输入URL,请检查拼写并重试。 如果您认为这是服务器错误,请联系网站管理员。 所有服务都正常运行我正在使用端口:80 我查看了apacheconf: 这是根医生 DocumentRoot:您将在其中提供文

  • 我正在用log4j2创建Spring-Boot应用程序。我使用的库是:https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api/2.11.1 https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/2.11.1 在这些JAR中找不到

  • 我是docker的新手,正在尝试容器化一个简单的Spring Boot应用程序。docker文件如下所示。 谢谢!!