我正在使用SQL Server 2014管理工作室,我发现了一个奇怪的情况。 在SQL查询对话框中,我键入下面的SQL:
SELECT * FROM System_User
我可以看到资源管理对话框中的表名是:dbo.System_User
然后当我尝试执行它时,它说有一些语法错误。
如果我将SQL更改为:
SELECT * FROM [ProjectManage].[dbo].[System_User]
效果很好。
但是在同一个SQL查询对话框中,我还有另一个SQL:
SELECT * FROM FlowTemplateTransition
资源管理对话框中的及其表名为dbo.FlowTemplateTransition
。
我的问题是:
dbo.FlowTemplateTransition
和FlowTemplateTransition
之间有什么区别?
何时需要添加dbo以及何时不需要? 我是否需要始终使用方括号? 感谢
答案 0 :(得分:0)
dbo是SQL Server中的默认架构。您可以创建自己的模式,以便更好地管理对象名称空间。
在SQL Server Management Studio中,您可以通过浏览到数据库 - 数据库 - 安全 - 架构来创建自己的架构。或者您可以执行以下查询来创建架构。
CREATE SCHEMA [SchemaName] AUTHORIZATION [dbo]
您可以使用它们对表格进行逻辑分组,例如为"供应商"创建schama。信息和另一个用于"客户"数据。您的表格将显示为:
vendors.BankAccounts
vendors.Transactions
customers.Address
而不是使用dbo的默认架构。
无需始终使用方括号[]。但是,如果您的数据库或表名包含点(。)之类的内容,则必须使用[]。
答案 1 :(得分:0)
你有3个问题。我已经单独列出了它。
SELECT * FROM System_User
无效?dbo.FlowTemplateTransition
和FlowTemplateTransition
答案1:System_User
是sql server内置的功能。您的表名与此函数冲突,这就是它给出错误的原因。
答案2:dbo
是默认数据库所有者。如果您没有写过表的所有者,那么Sql Server会自动将dbo
视为该表的所有者。
答案3:通常{@ 1}}无需添加。 如果在表名中使用关键字或特殊字符,则必须使用括号。