2013-04-17 15 views
7

Dopo aver aggiunto una colonna calcolata a una tabella in SQL Server 2005 viene visualizzato il seguente messaggio su INSERT, solo tramite PHP (utilizzando PDO) funziona correttamente in SQL Server Managment Studio.SQL Server errore 1934 si verifica su INSERT alla tabella con la colonna calcolata PHP/PDO

Per garantire che tutto fosse corretto, ho impostato una traccia con SQL Server Profiler e ho copiato/incollato l'istruzione INSERT in SQL Server Managment Studio. Funzionava bene in SSMS, ma continua a fallire in PHP.

Error adding contact: SQLSTATE[HY000]: General error: 1934 General SQL Server error: Check messages from the SQL Server [1934] (severity 16) [(null)]

risposta

8

Risulta che il problema riguardava i parametri SET. Ho usato il codice sottostante ottenuto da Here. Per determinare quali opzioni sono state impostate in SQL Server Management Studio (in cui l'inserto ha funzionato). Quindi, inserendo ognuno di questi in un exec prima della mia istruzione di inserimento, le cose hanno funzionato di nuovo. Non avevo bisogno di mantenere tutte le opzioni, quindi di seguito mostro quelle che erano necessarie per farlo funzionare.

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' 

Qui ci sono le opzioni che ho finito per avere bisogno:

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

Aggiornamento: Sembra vincoli FK provocato il seguente errore. Quanto sopra ha risolto anche questo errore.

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

5

In seguito alla risposta di @kackleyjm, ho provato ad attivare le meno opzioni possibili.

ho finito con:

SET ANSI_WARNINGS ON 
SET ANSI_PADDING ON 
SET CONCAT_NULL_YIELDS_NULL ON 

Questo ha fatto il trucco per me

+0

Potrebbe essere necessario scrivere le impostazioni usando PHP. Es .: $ dbPDO-> exec ("SET ANSI_WARNINGS ON"); – jjwdesign

+0

Dove lo metto? Su un file specifico o nel server? – bleykFaust

0

ho trovato questo problema si pone quando si esegue inserimento di massa o l'aggiornamento utilizzando XML in sql server. Ho trovato che questo problema riguarda il problema dell'indicizzazione in una tabella. Controllare

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

nella parte superiore del corpo procedura. Questo risolverà l'errore "1934".

Problemi correlati