2013-04-17 29 views
7

ile tabloya oluşur SQL Server 2005'te bir tabloya hesaplanmış bir sütun ekledikten sonra aşağıdaki iletiyi INSERT üzerinden yalnızca PHP (PDO kullanarak) alıyorum; SQL Server Yönetim Stüdyosu.SQL Server hatası 1934, hesaplanan sütun PHP/PDO

Her şeyin doğru olduğundan emin olmak için SQL Server Profiler ile bir izleme kurarım ve INSERT deyimini SQL Server Managment Studio'ya kopyalayıp yapıştırdım. SSMS'de gayet iyi geçti, ancak PHP'de başarısız olmaya devam ediyor.

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

cevap

8

Sorun, SET parametreleriyle ilgili olarak ortaya çıktı. Aşağıdaki kodu Here'dan elde ettim. SQL Server Management Studio'da (ekin çalıştığı yerde) hangi seçeneklerin ayarlandığını belirlemek için. Daha sonra, ekleme ifadesinden önce bunların her birini bir yürütme birimine yerleştirmek şeylerin yeniden çalışmasına neden oldu. Tüm seçenekleri saklamak zorunda değildim, aşağıda çalışmayı gerektirenleri göstereceğim.

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' 

Burada gerek sona erdi seçenekleri şunlardır:

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

Güncelleme: O FK kısıtlamaları aşağıdaki hatayla sonuçlandı görünüyor. Yukarıdaki bu hatayı da düzeltmiştir.

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

5

Takip eden kackleyjm yanıtı Mümkün olan en düşük seçenekleri etkinleştirmeyi denedim. Bu seni sql server XML kullanarak toplu insert veya güncelleme yaptığınızda bu sorun ortaya bulduk bana

+0

Ayarları PHP kullanarak yazmanız gerekebilir. Örn: $ dbPDO-> exec ("SET ANSI_WARNINGS ON"); – jjwdesign

+0

Bunu nereye koyacağım? Belirli bir dosyada veya sunucuda? – bleykFaust

0

için hile yaptı

SET ANSI_WARNINGS ON 
SET ANSI_PADDING ON 
SET CONCAT_NULL_YIELDS_NULL ON 

:

ben ile sona erdi. Bu sorunun bir tablodaki dizin oluşturma problemiyle ilgili olduğunu gördüm. Prosedür gövdesinin üstündeki

'u kontrol edin. Bu "1934" hatasını çözecektir.