sql - 将 nvarchar 值“2,3”转换为数据类型 int 时转换失败错误
问题描述
当我运行存储过程时,会发生错误。请建议如何解决此错误。
这是我的存储过程:
ALTER PROCEDURE [dbo].[spGetAllEmployees]
AS
BEGIN
SELECT
ISNULL(e.Id, '') AS [Id],
ISNULL(e.FirstName, '') AS [First Name],
ISNULL(e.LastName, '') AS [LastName],
ISNULL(e.Gender, '') AS [Gender],
ISNULL(e.DOB, '') AS [DOB],
ISNULL(c.Hobby, '') AS [Hobby],
ISNULL(e.Photo, '') AS [Photo],
ISNULL(e.City, '') AS [City]
FROM
Login e
INNER JOIN
tblHobby c ON e.Hobby = c.Id
END
我的第一张桌子是
CREATE TABLE [dbo].[Login] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[FirstName] VARCHAR (30) NULL,
[LastName] VARCHAR (30) NULL,
[Gender] VARCHAR (6) NULL,
[DOB] DATETIME NULL,
[Hobby] NVARCHAR (50) NULL,
[Photo] NVARCHAR (MAX) NULL,
[City] VARCHAR (50) NULL,
CONSTRAINT [PK_Login] PRIMARY KEY CLUSTERED ([Id] ASC)
);
第二张桌子是
CREATE TABLE [dbo].[tblHobby] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Hobby] NVARCHAR (50) NULL,
CONSTRAINT [PK_tblHobby] PRIMARY KEY CLUSTERED ([Id] ASC)
);
解决方案
ISNULL
与 相反COALESCE
,它将始终返回第一个参数的类型,因此您应该转换为VARCHAR
. 该错误是因为您的JOIN
子句tblHobby c ON e.Hobby = c.Id
隐式地尝试转换e.Hobby
为int
要比较的。由于您在该列中有一个分隔值,因此数据库无法转换该值。
尝试这个:
tblHobby c ON ',' + ISNULL(e.Hobby, '') + ',' LIKE '%,' + CAST(c.Id AS NVARCHAR(40)) + ',%'
推荐阅读
- python - PuLP(线性规划)LpMaximize 如何选择最优解?
- microservices - 在 EventSourcing 中应用业务逻辑的位置
- python - 无法定义文件路径
- javascript - 在多个组件中使用变量做出反应
- typescript - React Native:基于 Array.map() 的渲染组件不会在状态更改时更新
- r - 如何在 R drake 中组合和过滤动态文件目标?
- python - 后处理和读取模糊数字 - OpenCV / tesseract
- python - Python调用日期时间当前时间?
- python - 如何提前退出 Google Cloud 功能
- java - 在调用“VIBRATOR_SERVICE”之前检查设备的振动能力