【发布时间】:2013-03-30 02:44:26
【问题描述】:
我有关于以下帖子的问题,我会添加它,但它不会让我,因为我是新人。
已编辑以添加特定类型的表格和更好的信息
我在下面有两个表,希望完成将 studentname 的 tblnames 转换为 tblCombineNames 转换为 Student 姓名。
请指教,谢谢!
TblNames
ID(PK) StudentType(FK) StudentNo(FK) GradeNo(FK) StudentName
---------- ---------- ---------- ---------- -------------
1 1 1 1 Mary
2 1 1 1 John
3 1 1 1 Sam
4 2 2 2 Alaina
5 2 2 2 Edward
6 2 2 2 Joe
我希望输出低于
TblCombineNames
ID(PK) StudentType(PK) StudentNo(PK) GradeNo(PK) StudentNames
---------- ---------- ---------- ---------- -------------
1 1 1 1 Mary, John, Sam
2 2 2 2 Alaina, Edward, Joe
我会有一个标量值函数,命名为
---dbo.fn_Concatenate_Names
ALTER FUNCTION [dbo].[fn_Concatenate_Names]
(
@StudentType VARCHAR(250),
@StudentNo VARCHAR(250),
@GradeNo VARCHAR(250)
)
RETURNS Varchar(250)
BEGIN
Declare @rtn Varchar(250)
BEGIN
Select @rtn=(
Select StudentNames + ', ' as 'data()'
from tblStudentnames
where studentType = @StudentType and StudentNo = @StudentNo and GradeNo = @GradeNo
for XML path('')
)
Set @rtn = LEFT(@rtn, Len(@rtn) - 1)
END
RETURN (@rtn)
END
我会在更新时调用函数
update tblCombineNames
set studentnames = fn_concatenate_names(StudentType,StudentNo,GradeNo)
它似乎可以工作,但需要 2 小时才能运行 tblStudentNames 的 250730 条记录。我认为应该不会花那么长时间。
【问题讨论】:
-
您使用的是哪个 DBMS?后格雷斯?甲骨文?
-
好吧,我可能做了很长的路,但它有效,而且速度也很快!我最终在使用 xml 路径方式时将 tblNames 导入到临时表中,一旦名称在 temp db 中组合,然后我对 temp 和 tblCombineNames 进行内部连接并进行更新,然后结束执行 LEft Funtion -1取出 tblCombine 名称中每个值末尾的额外逗号。我与 JW 关系密切,甚至更接近我发布的上述链接!谢谢大家!
标签: sql sql-server-2008