我有一个名为 的表[User]
。下面是一个从表中查找一个用户的简单查询:
SELECT [Username]\n ,[FirstName]\n ,[LastName]\n ,[EmailAddress]\n ,[IsStaff]\n ,[ExternalID]\n ,[LastLogin]\nFROM [dbo].[User]\nWHERE [Username] = 'pskalhaq' -- 1\n--WHERE [Username] = '\xe2\x80\x8fpskalhaq' -- 2\n
Run Code Online (Sandbox Code Playgroud)\n当我运行此查询时,我得到一条记录,这正是我所期望的。当我注释掉WHERE
标记为“1”的子句并取消注释标记为“2”的子句时,我没有得到任何结果。这很奇怪,因为引号之间的值是相同的。
我发现这个问题是因为我编写的一个 Web 应用程序使用实体框架从另一个表获取记录,[Appointment]
由于表中没有相关记录而抛出错误[User]
,即使该[Appointment]
表包含不可为空的记录外键连接到[User]
表。这似乎是不可能的。我在 SSMS 中运行了等效查询(2892 是给我带来麻烦的约会记录的 ID):
SELECT a.[ID] AS [AppointmentID]\n ,a.[StudentUsername] -- This is the foreign key in the Appointment table\n ,u.[Username] -- This is the primary key in the User table\nFROM [dbo].[Appointment] a\nJOIN [dbo].[User] u \nON u.[Username] = a.[StudentUsername]\nWHERE a.[ID] …
Run Code Online (Sandbox Code Playgroud)