SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中
Posted
技术标签:
【中文标题】SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中【英文标题】:SQL Server error 1934 occurs on INSERT to table with computed column PHP/PDO 【发布时间】:2013-04-09 20:55:15 【问题描述】:在 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)]
【问题讨论】:
【参考方案1】:我发现当您在sql server
中使用 XML 进行批量插入或更新时会出现此问题。我发现这个问题与表中的索引问题有关。检查
`IF (SELECT SESSIONPROPERTY('ARITHABORT')) = 0 and SET ARITHABORT ON;`
在过程主体的顶部。这将解决"1934"
错误。
【讨论】:
【参考方案2】:按照@kackleyjm 的回答,我尝试激活尽可能少的选项。
我最终得到:
SET ANSI_WARNINGS ON
SET ANSI_PADDING ON
SET CONCAT_NULL_YIELDS_NULL ON
这对我有用
【讨论】:
您可能需要使用 PHP 编写设置。例如:$dbPDO->exec("SET ANSI_WARNINGS ON"); 我会把这个放在哪里?在特定文件上还是在服务器上?【参考方案3】:原来问题与 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]:一般错误:8624 一般 SQL Server 错误:检查 来自 SQL Server 的消息 [8624](严重性 16)[(null)]
【讨论】:
以上是关于SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中的主要内容,如果未能解决你的问题,请参考以下文章
安装sql server 2005时提示“安装时发生严重错误”
SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误
vs 或 Sql server2012连接Sql server时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误
sql server 2000服务管理器 服务:拒绝访问。发生错误5-(拒绝
vs 或 Sql server2012连接Sql server时出现的问题:已成功与服务器建立连接,但在登陆过程中发生错误