微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQL Server错误1934发生在INSERT到表与计算列PHP / PDO上

将计算列添加sql Server 2005中的表后,我在INSERT上收到以下消息,仅通过 PHP(使用PDO)它在sql Server Managment Studio中正常工作.

为了确保我的一切正确,我使用sql Server Profiler设置了跟踪,并将INSERT语句复制/粘贴到sql Server Managment Studio中.它在SSMS中运行得很好,但在PHP中仍然失败.

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

解决方法

原来问题与SET参数有关.我使用了从 Here获得的以下代码.确定在sql Server Management Studio中设置了哪些选项(插入工作的位置).然后在插入语句之前将其中的每一个放在exec中会导致事情再次起作用.我不需要保留所有选项,所以下面我展示了使它工作所需的选项.
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]: General error: 8624 General sql Server error: Check messages from the sql Server [8624] (severity 16) [(null)]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐