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

SQL Serverエラー1934は、計算列PHP/PDOを含むテーブルへのINSERTで発生します

    問題はSETパラメータに関係していることがわかりました。 ここ 。 SQL Server Management Studio(挿入が機能した場所)で設定されたオプションを判別するため。次に、insertステートメントの前にそれらのそれぞれをexecに配置すると、物事が再び機能するようになりました。すべてのオプションを保持する必要はなかったので、以下に、それを機能させるために必要なオプションを示します。

    DECLARE @options INT
    SELECT @options = @@OPTIONS
    
    PRINT @options
    IF ( (1 & @options) = 1 ) PRINT 'DISABLE_DEF_CNST_CHK' 
    IF ( (2 & @options) = 2 ) PRINT 'IMPLICIT_TRANSACTIONS' 
    IF ( (4 & @options) = 4 ) PRINT 'CURSOR_CLOSE_ON_COMMIT' 
    IF ( (8 & @options) = 8 ) PRINT 'ANSI_WARNINGS' 
    IF ( (16 & @options) = 16 ) PRINT 'ANSI_PADDING' 
    IF ( (32 & @options) = 32 ) PRINT 'ANSI_NULLS' 
    IF ( (64 & @options) = 64 ) PRINT 'ARITHABORT' 
    IF ( (128 & @options) = 128 ) PRINT 'ARITHIGNORE'
    IF ( (256 & @options) = 256 ) PRINT 'QUOTED_IDENTIFIER' 
    IF ( (512 & @options) = 512 ) PRINT 'NOCOUNT' 
    IF ( (1024 & @options) = 1024 ) PRINT 'ANSI_NULL_DFLT_ON' 
    IF ( (2048 & @options) = 2048 ) PRINT 'ANSI_NULL_DFLT_OFF' 
    IF ( (4096 & @options) = 4096 ) PRINT 'CONCAT_NULL_YIELDS_NULL' 
    IF ( (8192 & @options) = 8192 ) PRINT 'NUMERIC_ROUNDABORT' 
    IF ( (16384 & @options) = 16384 ) PRINT 'XACT_ABORT'
    

    結局必要になったオプションは次のとおりです。

    $dbPDO->exec("SET ANSI_WARNINGS ON");                                                                               
    $dbPDO->exec("SET ANSI_PADDING ON");
    $dbPDO->exec("SET ANSI_NULLS ON");
    $dbPDO->exec("SET QUOTED_IDENTIFIER ON");
    $dbPDO->exec("SET CONCAT_NULL_YIELDS_NULL ON");
    

    更新:FK制約により次のエラーが発生したようです。上記でこのエラーも修正されました。



    1. セキュリティを向上させるためにローカルホストからのMySQL接続を制限する

    2. 複雑なSQLの順序

    3. 正しい SQL が間違った結果をもたらすのはいつですか

    4. AWS RDSでのMySQLからPostgreSQLへの移行、パート3