gpt4 book ai didi

sql-server - 为什么我在尝试在 SQL Server 中模拟组连接时会收到此错误?

转载 作者:行者123 更新时间:2023-12-03 23:41:47 25 4
gpt4 key购买 nike

我有一个名为 Students 的表和另一个名为 Enrollment 的表。我想获取特定学生的记录以及他们注册了哪些类(class)。

我使用过 MySQL 函数 GROUP_CONCAT,该函数显然在 SQL Server 中不可用,而这正是我现在正在使用的。当我执行存储过程时,出现错误

Conversion failed when converting the varchar value ',' to data type int.

为什么我会得到这个?当我在 SQL Server Management Studio 中执行存储过程时,我将其值设置为 1。

这是我的存储过程:

ALTER PROCEDURE [dbo].[GetStudentDetails]
@studentID int
AS
BEGIN
SET NOCOUNT ON;

SELECT
s.studentId, s.firstName, s.lastName,
STUFF((SELECT ',' + e.courseId
FROM dbo.Enrollment as e
FOR XML PATH ('')), 1, 1, '') AS enrolledCourses
FROM dbo.Students as s
WHERE s.studentId = @studentID
END

我做错了什么?

最佳答案

这是因为您的数据类型不匹配。这里的courseIdINT,所以如果你想在它前面添加,,你必须将其转换为VARCHAR > 首先。

ALTER PROCEDURE [dbo].[GetStudentDetails]
-- Add the parameters for the stored procedure here
@studentID int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT s.studentId, s.firstName, s.lastName,
STUFF((SELECT ',' + CONVERT(VARCHAR(10), e.courseId)
FROM dbo.Enrollment as e
FOR XML PATH (''))
, 1, 1, '') AS enrolledCourses
FROM dbo.Students as s
WHERE s.studentId = @studentID
END

为了进一步解释它,因为你有:

',' + e.courseId

SQL Server 尝试将这两个值转换为具有更高优先级的数据类型。并且由于 INT 具有更高的 data type precedenceVARCHAR 相比,它尝试将 ',' 转换为 INT,然后导致错误:

Conversion failed when converting the varchar value ',' to data type int.

关于sql-server - 为什么我在尝试在 SQL Server 中模拟组连接时会收到此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37017476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com