管理分层数据“错误: 'REPEAT' 不是一个已识别的内置函数名。”

3

我是SQL的初学者。我正在研究如何使用ms sql r2 2008管理分层数据。这是我参考的链接: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ 但是现在我在“查找节点深度”方面遇到了问题。我将SQL查询复制到我的MS SQL中。

SELECT CONCAT( REPEAT(' ', COUNT(parent.name) - 1), node.name) AS name
FROM nested_category AS node, nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
GROUP BY node.name
ORDER BY node.lft;

它返回给我

消息195,级别15,状态10,行1:'REPEAT'不是已知的内置函数名称。

请有人帮忙纠正SQL查询吗?
此外,有没有更好的解决方案来管理分层数据?


1
在SQL Server中,您使用REPLICATE()而不是REPEAT() - Filip De Vos
嗨,我尝试重复执行,但现在它返回“CONCAT”不是已识别的内置函数名称。 - user998405
执行 SELECT REPLICATE(' ', COUNT(parent.name) - 1) + node.name AS NAME - Filip De Vos
3个回答

3

您正在使用MySQL文章中的代码在MS SQL Server上进行操作。

很多内容可以正常转换,但也有很多不能。正如@FilipDeVos所说,在SQL Server中,REPEAT()的等效函数是REPLICATE(),你会发现还有许多类似情况。

当您遇到这些问题时,需要在线搜索您正在使用的MySQL语句在SQL Server中的等效函数。


至于管理层次结构的不同方法,最常见的可能是邻接列表,然后是嵌套集合,就像您在那篇文章中使用的一样。这取决于您的需求,继续研究,没有通用的黄金答案。

编辑

如果您继续阅读该文章并在此处询问每个差异,您将永远在这里。您需要在网上搜索答案 ;)

但是,就您关于CONCAT()的问题而言,可以尝试以下操作...

SELECT REPLICATE(' ', COUNT(parent.name) - 1) + node.name AS name 

1

SQL Server和mysql有不同的语法。该查询可以重写如下

SELECT REPLICATE(' ', COUNT(parent.name) - 1) + node.name AS name
  FROM nested_category AS node
  JOIN nested_category AS parent
    ON node.lft BETWEEN parent.lft AND parent.rgt
 GROUP BY node.name
 ORDER BY node.lft;
  • MySQL中的REPEAT()函数可以用SQL Server中的REPLICATE()函数来替代。
  • MySQL中的CONCAT()函数在SQL Server中没有对应项,但可以通过使用+运算符进行字符串连接。
  • 在SQL Server中,使用INNER JOIN构造更具表现力,因此联接可以更好地编写(尽管逗号的方法也可以正常工作)。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接