Okazało się, że problem dotyczył parametrów SET. Użyłem poniższego kodu uzyskanego z Here. Aby ustalić, które opcje zostały ustawione w SQL Server Management Studio (gdzie wstawka działała). Następnie umieszczenie każdego z nich w exec przed moją instrukcją insert sprawiło, że rzeczy znowu działają. Nie musiałem przechowywać wszystkich opcji, więc poniżej pokazuję te, które były wymagane, aby działały.
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'
Oto opcje skończyło się na konieczności:
$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");
Aktualizacja: Wydaje ograniczenia FK spowodowało następującego błędu. Powyższy błąd również naprawił.
SQLSTATE[HY000]: General error: 8624 General SQL Server error: Check messages from the SQL Server [8624] (severity 16) [(null)]
Może zajść potrzeba zapisania ustawień za pomocą PHP. Przykład: $ dbPDO-> exec ("USTAW ANSI_WARNINGS ON"); – jjwdesign
Gdzie to położę? W konkretnym pliku lub na serwerze? – bleykFaust