SQL Server error 1934 occurs on INSERT to table with computed column PHP/PDO

前端 未结 3 856
粉色の甜心
粉色の甜心 2020-12-03 23:00

After adding a computed column to a table in SQL Server 2005 I am getting the following message on INSERT, only via PHP (using PDO) it\'s working fine in SQL Se

相关标签:
3条回答
  • 2020-12-03 23:40

    I have found this problem arise when you do bulk insert or update using XML in sql server. I've found this issue is regarding indexing problem in a table. Check

    `IF (SELECT SESSIONPROPERTY('ARITHABORT')) = 0 and SET ARITHABORT ON;` 
    

    at the top of the procedure body. This will solve the "1934" error.

    0 讨论(0)
  • 2020-12-03 23:42

    Turns out the problem had to do with the SET parameters. I used the code below obtained from Here. To determine which options were set in SQL Server Management Studio (where the insert worked). Then placing each of those in an exec prior to my insert statement caused things to work again. I didn't need to keep all the options, so below I show the ones which were required to get it working.

    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'
    

    Here are the options I ended up needing:

    $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");
    

    Update: It seems FK constraints resulted in the following error. The above fixed this error as well.

    SQLSTATE[HY000]: General error: 8624 General SQL Server error: Check messages from the SQL Server [8624] (severity 16) [(null)]

    0 讨论(0)
  • 2020-12-03 23:50

    Following @kackleyjm answer I tried to activate the less options possible.

    I ended up with:

    SET ANSI_WARNINGS ON
    SET ANSI_PADDING ON
    SET CONCAT_NULL_YIELDS_NULL ON
    

    This did the trick for me

    0 讨论(0)
提交回复
热议问题