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がこの状況で異なる動作をする理由に向けられていることに注意してください。2番目のサンプルが機能しなかった場合は、これを試してください。これにより、エラーなしで挿入したのと同じデータと、 Microsoft SQL Server 2008 R2(RTM)-10.50.1600.1(X64)...のSQLServerバージョンが得られます。

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を入れると、上記と同じ例外がスローされます。

アップデート:

これは解決されました。この動作は、コンパイル時にのみ発生し、SQLServerではこれをコンパイルできます。ただし、実行すると、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それを機能させるには、キーワードを削除する必要があります。を使用すると、列のエイリアスASを定義しようとしますが、またははSQL Serverの予約済みキーワードであるため、これらを列エイリアスとして使用することはできません。SQL Server 2012 Expressでも同じです-これらのエラーも発生し、不要なキーワードを削除しないと機能しませんUNIQUEIDENTIFIERINTAS

于 2012-08-08T15:29:29.240 に答える