Sql 转换nvarchar值时转换失败';2,3';输入数据类型int错误

Sql 转换nvarchar值时转换失败';2,3';输入数据类型int错误,sql,sql-server,Sql,Sql Server,运行存储过程时,会发生错误。请建议如何修复此错误 这是我的存储过程: 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.Ge

运行存储过程时,会发生错误。请建议如何修复此错误

这是我的存储过程:

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
。错误是因为e.Hobby=c.Id上的
JOIN
子句
tblHobby c隐式尝试将
e.Hobby
转换为
int
进行比较。由于该列中有分隔值,数据库无法转换该值

试试这个:

tblHobby c ON ',' + ISNULL(e.Hobby, '') + ',' LIKE '%,' + CAST(c.Id AS NVARCHAR(40)) + ',%'

错误是什么?我还将标记更改为SQL Server,因为这看起来像SQL Server代码。
login.hobby
不是以逗号分隔的hobby ID列表,是吗?如果是,请选中此项:然后更改您的模式。请向我们展示这两个表的表结构(创建表的
语句),并向我们展示这些表中的一些示例数据tables@Atk“不,不要转发问题,这只会锁定新问题。用户无法发布已关闭问题的答案,@Nikunj。”。您需要充分改进您的问题,以便它可以在重新打开队列中成功循环。它会在新的原始数据中给出所有选定的值,但我希望在一个原始数据中输入i值,而不是指定您希望看到的值。先生,我希望在单个原始数据中输入表“tblHobby”的“爱好”字段的值……….tblHobby c ON',“+为空(e.Hobby,“)+”,“LIKE”“,“+CAST(c.Id AS NVARCHAR(40))+”,“%”在这个例子中,我在saparate Raw中得到了值“oposite中的ISNULL始终是第一个参数的类型”这意味着
COALESCE
将返回最后一个参数的数据类型;这不是真的。
COALESCE
是一个简写的
CASE
表达式,并且
CASE
使用数据类型优先级。
COALESCE(1,'0')
ISNULL(1,'0'))
将分别返回
int
、而不是
varchar
int