2013-04-17 7 views
7

Nach dem Hinzufügen einer berechneten Spalte zu einer Tabelle in SQL Server 2005 bekomme ich die folgende Nachricht auf INSERT, nur über PHP (mit PDO) es funktioniert gut in SQL Server-Verwaltungsstudio.SQL Server Fehler 1934 tritt bei INSERT Tabelle mit berechneter Spalte PHP/PDO

Um sicherzustellen, dass alles korrekt war, habe ich eine Ablaufverfolgung mit SQL Server Profiler eingerichtet und die INSERT-Anweisung in SQL Server Managment Studio kopiert/eingefügt. Es lief gut in SSMS, scheitert aber weiterhin in PHP.

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

Antwort

8

Es stellte sich heraus, dass das Problem mit den SET-Parametern zu tun hatte. Ich habe den folgenden Code von Here verwendet. So legen Sie fest, welche Optionen in SQL Server Management Studio festgelegt wurden (wo die Einfügung ausgeführt wurde). Wenn Sie dann jedes dieser Elemente vor der Insert-Anweisung in einem Exec platzieren, werden die Dinge wieder funktionieren. Ich musste nicht alle Optionen behalten, daher zeige ich unten diejenigen, die benötigt wurden, um es zum Laufen zu bringen.

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' 

Hier sind die Optionen, die ich benötigen endete:

$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: Es scheint Einschränkungen FK in den folgenden Fehlern geführt. Das obige behebt diesen Fehler ebenfalls.

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

5

Nach @ kackleyjm Antwort habe ich versucht, die weniger möglichen Optionen zu aktivieren.

Ich landete mit:

SET ANSI_WARNINGS ON 
SET ANSI_PADDING ON 
SET CONCAT_NULL_YIELDS_NULL ON 

Das ist für mich den Trick habe

+0

Möglicherweise müssen Sie die Einstellungen mit PHP schreiben. Bsp: $ dbPDO-> exec ("SET ANSI_WARNINGS ON"); – jjwdesign

+0

Wo soll ich das hinstellen? Auf einer bestimmten Datei oder auf dem Server? – bleykFaust

0

ich dieses Problem gefunden entstehen, wenn Sie in sql server Masseneinfügung oder Update mit XML zu tun. Ich habe festgestellt, dass dieses Problem das Indizierungsproblem in einer Tabelle betrifft. Überprüfen Sie

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

an der Spitze des Verfahrens body. Dies löst den "1934" Fehler.

Verwandte Themen