【问题标题】:Incorrect syntax near the keyword 'SCHEMA'. ERROR With creating it关键字“SCHEMA”附近的语法不正确。错误创建它
【发布时间】:2016-07-06 07:33:16
【问题描述】:

我正在尝试创建视图架构,但遇到了一些问题。

你能解释一下吗?我是模式的新手。

CREATE VIEW schema.[TEMP1_V](
LOCATION,
OBJECTID,
CTID,
numb,
COUNTALL,
COUNTALL_DEBIT
)
AS SELECT 
LOCATION,
OBJECTID,
CTID,
numb,
COUNTALL,
COUNTALL_DEBIT
COUNT (location) OVER (PARTITION BY location) AS COUNTALL,
COUNT (location) OVER (PARTITION BY location, IS_DEBIT) AS COUNTALL_DEBIT
FROM ALLOCAMT_V

我在尝试创建它时遇到错误。 '关键字'SCHEMA'附近的语法不正确。'

【问题讨论】:

  • 您的架构实际上是否称为“架构”?这里的默认值是'dbo'
  • 只需删除schema.,视图就会在默认架构中创建。
  • 嗨,我试过这样做..但不起作用。
  • 您的意思是您尝试了@jarlh 的建议?为什么它不起作用?您收到(新)错误消息了吗?
  • 另外,从选择列表中删除重复的列!

标签: sql sql-server sql-server-2008 views database-schema


【解决方案1】:

我怀疑您的架构实际上称为schema。默认值为dbo,这就是我在下面的示例中使用的。你也不需要像你一样声明你的字段名。您还在 select 语句中复制了 COUNTALLCOUNTALL_DEBIT 列。

CREATE VIEW dbo.[TEMP1_V]
AS 
SELECT 
    LOCATION,
    OBJECTID,
    CTID,
    numb,
    COUNT (location) OVER (PARTITION BY location) AS COUNTALL,
    COUNT (location) OVER (PARTITION BY location, IS_DEBIT) AS COUNTALL_DEBIT
FROM ALLOCAMT_V

【讨论】:

    【解决方案2】:

    试试dbo

    dbo 是 SQL Server 中的默认架构。如果您有自己的架构,则可以使用 <schema_name>.[TEMP1_v]

    创建此视图
        CREATE VIEW dbo.[TEMP1_V]
        AS SELECT 
        LOCATION,
        OBJECTID,
        CTID,
        numb,
        COUNT (location) OVER (PARTITION BY location) AS COUNTALL,
        COUNT (location) OVER (PARTITION BY location, IS_DEBIT) AS COUNTALL_DEBIT
    FROM ALLOCAMT_V
    

    【讨论】:

    • 我们真的需要 VIEW 的参数吗?
    • @Arulkumar 但是你能告诉我,有什么不同吗?
    【解决方案3】:

    首先,你的例子是这样开始的:

    CREATE VIEW
    

    因此,不知道它是如何工作的,我们从 Microsoft 的 MSDN 页面查找 CREATE VIEW - MSDN 并查看以下内容:

    CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] 
    [ WITH <view_attribute> [ ,...n ] ] 
    AS select_statement 
    [ WITH CHECK OPTION ] [ ; ]
    
    <view_attribute> ::= 
    {
        [ ENCRYPTION ]
        [ SCHEMABINDING ]
        [ VIEW_METADATA ]     }
    

    我们注意到VIEW 的示例不包括开头部分中的列,因此我们回到MSDN 上的定义并查看以下内容:

    schema_name

    是视图所属的schema的名称

    是用于视图中列的名称。列名是 仅当列从算术表达式派生时才需要, 一个函数,或一个常数;当两列或更多列可能有 同名,通常是因为加入;或者当视图中的列 指定的名称与它所在的列的名称不同 衍生的。 也可以在 SELECT 语句中指定列名

    如果未指定列,则视图列的名称与相同 SELECT 语句中的列。

    更新:所以没有理由在这里定义列,因为您的查询已经这样做了。

    这给我们带来了这些结论:

    • 使用MSDN 解决语法问题。
    • 仅在绝对必要时指定视图中的列。
    • 只能在当前中创建视图database

    【讨论】:

      猜你喜欢
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2013-12-16
      • 2011-04-07
      • 2017-11-22
      相关资源
      最近更新 更多