NVARCHAR奇怪的例外

时间:2012-08-08 15:25:42

标签: sql-server nvarchar

这个例外:'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在幕后工作的情况与尝试解决工作情况不同。 对于那些无法获得第二个样本的人,请尝试这个。 这给了我插入的相同数据没有错误和SQL Server版本 Microsoft SQL Server 2008 R2(RTM) - 10.50.1600.1(X64)....

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抛出任何数据类型的异常。

1 个答案:

答案 0 :(得分:4)

您不需要所有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时,我收到以下错误:

  

Msg 207,Level 16,State 1,Line 3
  列名称'UNIQUEIDENTIFIER'无效。

     

Msg 207,Level 16,State 1,Line 7
  列名称“INT”无效。

我必须删除AS个关键字才能使其正常运行。使用AS尝试为列定义别名 - 但由于UNIQUEIDENTIFIERINT是SQL Server中的保留关键字,因此您不能将其用作列别名。对于SQL Server 2012 Express也是如此 - 我也会收到这些错误,除非删除那些不必要的AS关键字,否则无法使其生效