gpt4 book ai didi

sql - 为什么要在 sql 函数名前加上前缀?

转载 作者:行者123 更新时间:2023-12-02 07:34:52 25 4
gpt4 key购买 nike

什么场景可以说明在 SQL Server 中的函数名称上使用前缀(例如 fn_GetName)的充分理由?看起来这是没有必要的,因为通常它的使用上下文会清楚地表明它是一个函数。我没有使用过任何其他需要函数前缀的语言,而且我想不出一个好的场景来说明为什么 SQL 有任何不同。

我唯一的想法是,也许在较旧的 IDE 中,当数据库对象全部列出在一起时,将函数分组在一起很有用,但现代 IDE 已经明确了什么是函数。

最佳答案

您对旧 IDE 的看法是正确的

作为一名 DBA,尝试使用 SQL Server 企业管理器(SQL Server 2000 和 7.0)修复权限,但尝试查看权限完全是个错误。如果您有 ufn 或 usp 或 vw,由于 GUI 呈现数据的方式,将事物分组在一起会变得更容易。

也就是说,如果你有SELECT * FROM Thing,那么Thing是什么? View 还是表格?作为开发人员,它可能适合您,但部署时会崩溃,因为您没有授予表本身的权限:仅授予 View 或过程。 vwThing 肯定能降低你的血压......?

如果您使用模式,它就变得无关紧要。您可以为您的对象“命名空间”。例如,“数据”中的表和其他模式中每个客户端的其他对象,例如 WebGUI

编辑:

函数。您有表值函数和标量函数。如果您坚持代码“VerbNoun”概念,那么您如何在没有其他线索的情况下知道哪个是哪个。 (当然,这是不可能发生的,因为对象名称是唯一的)

SELECT dbo.GetName() FROM MyTable
SELECT * FROM dbo.GetName()

如果您使用复数来表示表值函数,这可能会更糟

SELECT dbo.GetName() FROM MyTable
SELECT * FROM dbo.GetNames()

尽管这对某些人来说是冒犯的,但不太含糊;-)

SELECT dbo.sfnGetName() FROM MyTable
SELECT * FROM dbo.tfnGetName()

带有模式。而且名字没有歧义。

SELECT ScalarFN.GetName() FROM MyTable
SELECT * FROM TableFN.GetName()

您的“任何其他语言”评论不适用。 SQL 的结构不像 c#、Java、f#、Ada(好吧,PL/SQL 可能是)、VBA 等:没有对象或命名空间层次结构。没有 Object.DoStuff 方法内容。

前缀可能只是让你保持理智的东西......

关于sql - 为什么要在 sql 函数名前加上前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4548598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com