After adding a computed column to a table in SQL Server 2005 I am getting the following message on
INSERT, only via PHP (using PDO) it’s working fine in SQL Server Managment Studio.
To ensure I had everything correct I setup a trace with SQL Server Profiler and copy/pasted the INSERT statement into SQL Server Managment Studio. It ran just fine in SSMS, but continues to fail in PHP.
Error adding contact: SQLSTATE[HY000]: General error: 1934 General SQL
Server error: Check messages from the SQL Server  (severity 16)
Turns out the problem had to do with the SET parameters. I used the code below obtained from Here. To determine which options were set in SQL Server Management Studio (where the insert worked). Then placing each of those in an exec prior to my insert statement caused things to work again. I didn’t need to keep all the options, so below I show the ones which were required to get it working.
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'
Here are the options I ended up needing:
$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");
It seems FK constraints resulted in the following error. The above fixed this error as well.
SQLSTATE[HY000]: General error: 8624 General SQL Server error: Check
messages from the SQL Server  (severity 16) [(null)]
Following @kackleyjm answer I tried to activate the less options possible.
I ended up with:
SET ANSI_WARNINGS ON SET ANSI_PADDING ON SET CONCAT_NULL_YIELDS_NULL ON
This did the trick for me
I have found this problem arise when you do bulk insert or update using XML in
sql server. I’ve found this issue is regarding indexing problem in a table. Check
`IF (SELECT SESSIONPROPERTY('ARITHABORT')) = 0 and SET ARITHABORT ON;`
at the top of the procedure body. This will solve the