在SQL Server 2014中为什么SELECT * FROM System_User不起作用但SELECT * FROM [ProjectManage]。[dbo]。[System_User]工作

时间:2017-04-11 10:11:14

标签: sql-server

我正在使用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.FlowTemplateTransitionFlowTemplateTransition之间有什么区别?

何时需要添加dbo以及何时不需要? 我是否需要始终使用方括号? 感谢

2 个答案:

答案 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个问题。我已经单独列出了它。

  1. 为什么SELECT * FROM System_User无效?
  2. dbo.FlowTemplateTransitionFlowTemplateTransition
  3. 之间有什么区别
  4. 何时需要添加dbo以及何时不需要?我是否需要始终使用方括号?
  5. 答案1:System_User是sql server内置的功能。您的表名与此函数冲突,这就是它给出错误的原因。

    答案2:dbo是默认数据库所有者。如果您没有写过表的所有者,那么Sql Server会自动将dbo视为该表的所有者。

    答案3:通常{@ 1}}无需添加。 如果在表名中使用关键字或特殊字符,则必须使用括号。