sql >> データベース >  >> RDS >> Sqlserver

データベース プロジェクトのビルド時の「不正な SET オプション」エラー

    BOL によると :

    永続化された計算列を含むテーブルを作成するには、次の接続設定を有効にする必要があります:

    SET ANSI_NULLS ON
    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    SET ARITHABORT ON
    SET CONCAT_NULL_YIELDS_NULL ON
    SET NUMERIC_ROUNDABORT ON
    SET QUOTED_IDENTIFIER ON
    

    これらの値はデータベース レベルで設定され、以下を使用して表示できます。

    SELECT 
        is_ansi_nulls_on,
        is_ansi_padding_on,
        is_ansi_warnings_on,
        is_arithabort_on,
        is_concat_null_yields_null_on,
        is_numeric_roundabort_on,
        is_quoted_identifier_on
    FROM sys.databases
    

    ただし、 SET オプションはクライアント アプリケーションでも設定できます SQL Server に接続しています。

    完璧な例は SQL Server Management Studio で、SET ANSI_NULLS と SET QUOTED_IDENTIFIER の両方の既定値が ON になっています。これが、投稿されたエラーを最初に複製できなかった理由の 1 つです。

    とにかく、エラーを再現するには、これを試してください (これは SSMS のデフォルト設定を上書きします):

    SET ANSI_NULLS ON
    SET ANSI_PADDING OFF
    SET ANSI_WARNINGS OFF
    SET ARITHABORT OFF
    SET CONCAT_NULL_YIELDS_NULL ON 
    SET NUMERIC_ROUNDABORT OFF
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE TABLE T1 (
        ID INT NOT NULL,
        TypeVal AS ((1)) PERSISTED NOT NULL
    ) 
    

    以下を使用して、上記のテスト ケースを修正できます。

    SET ANSI_PADDING ON
    SET ANSI_WARNINGS ON
    

    テーブルと関連するインデックスを作成する前に、スクリプトでこれら 2 つの設定を微調整することをお勧めします。



    1. ローカルファイルからMySQLテーブルを更新する

    2. java.sql.TimestampでJoda-Timeを使用する方法

    3. 階層データを取得するためのMYSQLでの再帰的ストアドプロシージャのパフォーマンス

    4. 同時にウェブインサート