【发布时间】:2016-04-06 18:49:56
【问题描述】:
我正在使用 Eloquent ORM 或 Query Builder 通过 Laravel 访问 MS SQLServer。这适用于所有表,但一个特定表会引发此错误:
production.ERROR: exception 'Illuminate\Database\QueryException'
with message 'SQLSTATE [HY000]: General error: 4004 General SQL Server error:
Check messages from the SQL Server [4004] (severity 16) [(null)]
(SQL: select * from [tblLeistung])
我在 MS SQLServer Management Studio 中执行了给定的 SQL 查询,它运行良好。
我还尝试在 ORM protected $table = 'DBName.dbo.tblLeistung'; 中添加数据库名称和模式名称,这会正确生成 (SQL: select * from [DBName].[dbo].[tblLeistung]),但也会引发相同的错误。
问题似乎出在架构上,因为它是一个相当大的表(23 列,2160 条记录)。删除它并使用相同的架构重新创建它仍然会导致错误。删除它并创建一个具有相同名称的简单表可以解决错误(但是我需要使它与给定的架构一起工作)。
任何人都知道是否存在遥控器不支持的特定表设计通过 Laravel 访问 SQLServer?
是否有其他(简单)方法来测试,问题出在 Laravel 还是服务器上?
我已经有一段时间了,感谢任何帮助。提前致谢!
生成的有问题表的CREATE TABLE 语句如下所示:
CREATE TABLE [dbo].[tblLeistung](
[LeistungID] [int] IDENTITY(1,1) NOT NULL,
[LeistungskatalogID] [int] NULL,
[SchlagID] [int] NOT NULL,
[StatusInternID] [int] NULL,
[StatusExternID] [int] NULL,
[VertragID] [int] NULL,
[Menge] [float] NULL DEFAULT ((0)),
[SperreLeistung] [bit] NULL DEFAULT ((0)),
[SperreAusfuehrung] [bit] NULL DEFAULT ((0)),
[RechnungEinkID] [int] NULL,
[RechnungVerkID] [int] NULL,
[LeistungsunterkatID] [int] NULL,
[LeistungsBeschreibung] [nvarchar](max) NULL,
[InterneNotiz] [nvarchar](max) NULL,
[AbrechungsdatenVorhanden] [bit] NULL DEFAULT ((0)),
[AuftragID] [smallint] NULL,
[UeberleistungID] [int] NULL,
[AuftraggeberID] [int] NULL,
[SSMA_TimeStamp] [timestamp] NOT NULL,
[DatumFrist] [datetime] NULL,
[DatumGeplant] [datetime] NULL,
[DatumAusgefuehrt] [datetime] NULL,
[DatumAuftragfreigabe] [datetime] NULL,
CONSTRAINT [tblLeistung$PrimaryKey] PRIMARY KEY CLUSTERED
(
[LeistungID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
ALTER TABLE [dbo].[tblLeistung] WITH NOCHECK ADD CONSTRAINT [tblLeistung$tbRechnungVerktblLeistung] FOREIGN KEY([RechnungVerkID])
REFERENCES [dbo].[tblRechnungVerk] ([RechnungVerkID])
ON UPDATE CASCADE
ALTER TABLE [dbo].[tblLeistung] CHECK CONSTRAINT [tblLeistung$tbRechnungVerktblLeistung]
编辑:
- 删除
FOREIGN KEY并没有解决问题 - 如果我访问一个不存在的表,也会出现同样的错误。但是,在具有不同配置的多个数据库实例上创建同一个表后,我非常确信它存在。
【问题讨论】:
-
您是否必须将 unicode 数据保存在“LeistungsBeschreibung”中?如果没有尝试将数据类型更改为 varchar。
-
哇,太巧妙了——非常感谢!这似乎确实是问题所在。在“LeistungsBeschreibung”和“InterneNotiz”列中使用 varchar 重新创建表似乎有效。然而,简单地将数据插入新模式会产生转换错误(从 nvarchar 到 datetime)。我将不得不与数据库管理员交谈。 那是我问题的答案吗? Laravel + MS SQL Server 无法处理 nvarchar(MAX) 列中的 unicode 数据?是否有设置可以规避这种情况并在不更改架构的情况下进行查询?
标签: sql-server sql-server-2008 laravel