相关疑难解决方法(0)

解析自引用表时CTE中的无限循环

我正在使用以下公用表表达式来解析自引用表.但CTE不起作用,产生无限循环并产生错误:

Msg 530,Level 16,State 1,Line 1声明终止.在语句完成之前,最大递归100已用尽.

如何修改此CTE以使其工作?

SET NOCOUNT ON;
USE tempdb;

IF OBJECT_ID('dbo.Employees', 'U') IS NOT NULL DROP TABLE dbo.Employees;

CREATE TABLE dbo.Employees
(
  empid   INT         NOT NULL PRIMARY KEY,
  mgrid   INT         NULL     REFERENCES dbo.Employees,
  empname VARCHAR(25) NOT NULL,
  salary  MONEY       NOT NULL,
  CHECK (empid > 0)
);

INSERT INTO dbo.Employees(empid, mgrid, empname, salary) VALUES
  (1,  1, 'David'  , $10000.00),
  (2,  1,    'Eitan'  ,  $7000.00),
  (3,  1,    'Ina'    ,  $7500.00),
  (4,  2,    'Seraph' ,  $5000.00),
  (5,  2,    'Jiru'   , …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server recursive-query sql-server-2008

12
推荐指数
1
解决办法
5411
查看次数

SQLServer count()over()with distinct

我正在研究一个项目,我们需要计算不同行的数量.方案的简化版本包括user表,keyword表和keyword_user表.

user表仅包括公共用户元数据,如名称等.下面列出了其他表.

keyword_user:

id
user_id
keyword_id
Run Code Online (Sandbox Code Playgroud)


关键词:

id,
description
Run Code Online (Sandbox Code Playgroud)

我想要做的是根据用户keyword_id找到最大用户数(5),同时还计算匹配行的总数.计数必须是不同的.

查询:

SELECT TOP 5 u.[id], 
             u.[firstname], 
             u.[lastname], 
             total = Count(*) OVER() 
FROM   [user] u 
       INNER JOIN [keyword_user] ku 
               ON u.[id] = ku.[user_id] 
WHERE  ( ku.keyword_id IN ( '5f6501ec-0a71-4067-a21d-3c5f87a76411', 'c19b95c0-8554-4bbd-9526-db8f1c4f1edf')) 
       AND u.id NOT IN ( '12db3001-b3b9-4626-8a02-2519102cb53a' ) 
Run Code Online (Sandbox Code Playgroud)

结果集:

+--------------------------------------+-----------+----------+-------+
|                  id                  | firstname | lastname | total |
+--------------------------------------+-----------+----------+-------+
| F0527AC3-747A-45A6-9CF9-B1F6C7F548F8 | Kasper    | Thomsen  |     3 |
| 95988F6D-9C91-4779-B6C3-3D4B4D6AE836 | Michael   | …
Run Code Online (Sandbox Code Playgroud)

sql-server join inner-join count window-functions

9
推荐指数
1
解决办法
483
查看次数

有没有办法在SQL Server中检测分层查询中的循环?

在Oracle中,我们可以使用该函数CONNECT_BY_ISCYCLE来检测分层查询中的循环.我尝试在SQL Server中执行相同的操作.有没有办法做到这一点?

非常感谢!

t-sql sql-server connect-by hierarchy

3
推荐指数
1
解决办法
1377
查看次数