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
。