2

这个给出了例外:'NVARCHAR' 不是一个公认的内置函数名。

DECLARE @BatchIds TABLE
    (
      BatchId AS UNIQUEIDENTIFIER ,
      UserLogonId AS NVARCHAR(80) ,
      ReportStatus NVARCHAR(100) ,
      Created DATETIME ,
      RunTimeInMins AS INT ,
      ReportName NVARCHAR(200)
    )

当我删除 NVARCHAR 的“AS”时,它没有给出任何异常。

DECLARE @BatchIds TABLE
    (
      BatchId AS UNIQUEIDENTIFIER ,
      UserLogonId NVARCHAR(80) ,
      ReportStatus NVARCHAR(100) ,
      Created DATETIME ,
      RunTimeInMins AS INT ,
      ReportName NVARCHAR(200)
    )

关于为什么的任何建议?

更新:

请注意,我的问题更多是针对为什么 AS 在这种情况下的工作方式与试图解决工作情况不同的原因。对于那些无法让第二个样本工作的人,请试试这个。这为我提供了与Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)相同的数据和 SQL Server 版本。

DECLARE @BatchIds TABLE
    (
      UserLogonId NVARCHAR(80) ,
      ReportStatus NVARCHAR(100) ,
      Created DATETIME
    )
INSERT  INTO @BatchIds
        ( UserLogonId ,
          ReportStatus ,
          Created
        )
VALUES  ( 'Test1' ,
          'Test2' ,
          '2012-08-08'
        )

SELECT  *
FROM    @BatchIds
SELECT  @@VERSION AS [Version]

在此查询中为 NVARCHAR 放置一个 AS 会引发与上述相同的异常。

更新:

这解决了。此行为仅在您编译它并且 SQL Server 允许您编译它时出现。但是当你运行它时,它会为任何使用 AS 的数据类型抛出异常。

4

1 回答 1

5

您不需要所有这些AS关键字 - 只需像这样定义表变量:

DECLARE @BatchIds TABLE
(
  BatchId UNIQUEIDENTIFIER ,
  UserLogonId NVARCHAR(80) ,
  ReportStatus NVARCHAR(100) ,
  Created DATETIME ,
  RunTimeInMins INT ,
  ReportName NVARCHAR(200)
)

当尝试在我的 SQL Server 2008 R2 (SP1 - Developer Edition) 上运行您的示例 #2 时,我收到以下错误:

消息 207,级别 16,状态 1,第 3 行
无效的列名称“UNIQUEIDENTIFIER”。

消息 207,级别 16,状态 1,第 7 行
无效的列名称“INT”。

我必须删除AS关键字才能使其正常工作。UsingAS正在尝试为列定义别名- 但由于UNIQUEIDENTIFIERorINT是 SQL Server 中的保留关键字,因此您不能将它们用作列别名。SQL Server 2012 Express 也是如此 - 我也遇到了这些错误,除非我删除那些不必要的AS关键字,否则无法使其正常工作

于 2012-08-08T15:29:29.240 回答