Ошибка SQL Server 1934 возникает при вставке в таблицу с вычисляемым столбцом PHP/PDO

после добавления вычисляемого столбца в таблицу в SQL Server 2005 я получаю следующее сообщение на INSERT, только через PHP (используя PDO) он отлично работает в SQL Server Managment Studio.

чтобы убедиться, что все правильно, я настроил трассировку с помощью SQL Server Profiler и скопировал/вставил инструкцию INSERT в SQL Server Managment Studio. Он отлично работал в SSMS, но продолжает терпеть неудачу в PHP.

ошибка добавления контакта: SQLSTATE[HY000]: общие ошибка: 1934 общий SQL Ошибка сервера: проверка сообщений с SQL Server [1934] (серьезность 16) [(null)]

3 ответов


оказывается, проблема связана с заданными параметрами. Я использовал код ниже, полученный из здесь. Чтобы определить, какие параметры были установлены в среде SQL Server Management Studio (где работала вставка). Затем размещение каждого из них в exec до моего оператора insert заставило вещи работать снова. Мне не нужно было держать все варианты, поэтому ниже я показываю те, которые были необходимы, чтобы заставить его работать.

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'

вот варианты, которые я закончил нужно:

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

обновление: Кажется, ограничения FK привели к следующей ошибке. Выше также исправлена эта ошибка.

SQLSTATE[HY000]: общая ошибка: 8624 общая ошибка SQL Server: проверка сообщения от SQL Server [8624] (серьезность 16) [(null)]


после ответа @kackleyjm я попытался активировать меньше возможных опций.

Я закончил с:

SET ANSI_WARNINGS ON
SET ANSI_PADDING ON
SET CONCAT_NULL_YIELDS_NULL ON

Это сделал трюк для меня


я обнаружил, что эта проблема возникает, когда вы делаете массовую вставку или обновление с помощью XML в sql server. Я обнаружил, что эта проблема касается проблемы индексирования в таблице. Проверка

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

в верхней части тела процедур. Это решит "1934" ошибка.