一个复杂的存储过程问题 顶者有分 没有分了 大家帮忙啊

javabuilder9 2008-05-06 08:42:21
这样一个问题 存储过程输入一个字符串 @list @list的值为1,2,3 或者1,2,4,或者1,6,9。。。。。。

然后根据@list的值 分别取表T_CheckTable的值,例如 @List=1,2,3

则分别取T_CheckTable的ID为1,2,3的值
T_CheckTable的字段为


则取ID=1 tablelist=1,2,4,5
ID=2 .........=1,2,5,7,9
ID=3 ..........=1,2,8,9,12

然后组合 tablelist 取其中的唯一值
...全文
219 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ReyZhang 2008-05-06
  • 打赏
  • 举报
回复
呵呵,上面写的好像有错误,更正如下



SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: zhangl
-- Create date: 2008-5-6
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE ProcTest_Proc
@list varchar(1000)
AS
BEGIN

SET NOCOUNT ON

Declare @tablelist varchar(8000)
set @tablelist=N''

--根据id组合tablelist列的所有值
select @tablelist=@tablelist+tablelist+',' from T_CheckTable where id in (select * from dbo.Split_Fun(@list,','))

--定义表变量
Declare @t table(tableid varchar(10))


--将分割后的字符存放的表变量中
insert into @t
select * from dbo.Split_Fun(@tablelist,',')

--去掉重复的,取其中的唯一值,并插入到临时表#temp
select distinct tableid into #temp from @t

--组合字符串
Declare @id varchar(1000)
set @id=N''
select @id=@id+tableid+',' from #temp
set @id=substring(@id,len(@id)) --去掉最后的,

drop table #temp

--显示结果
select @id

END
GO
地下室小红叔 2008-05-06
  • 打赏
  • 举报
回复
写完了 楼主试试
create table T_checkTable
(
id int identity(1,1),
tableList varchar(50) default('1,')
)

insert into t_checktable values('1,2,5,9,')
insert into t_checktable values('1,3,4,9,')
insert into t_checktable values('1,3,4,8,10')
insert into t_checktable values('1,7,11,')

declare @list varchar(100),@temp varchar(10),@temp2 varchar(10),@tempList varchar(500),@result varchar(5000)
set @result=''
set @list='1,3,4,8,15' --设为传入的值
set @list=case when right(@list,1)=',' then @list else @list+',' end --给末尾非逗号结尾的字符串附加逗号
while charindex(',',@list)>0
begin
set @temp=substring(@list,1,charindex(',',@list)-1)
select @tempList=tableList from t_checkTable where [id]=@temp
set @tempList=case when right(@tempList,1)=',' then @tempList else @tempList+',' end
while charindex(',',@tempList)>0
begin
set @temp2=substring(@tempList,1,charindex(',',@tempList)-1)
set @result=case when len(@temp2)>0 and charindex(@temp2,@result)=0 then @result+@temp2+',' else @result end
set @tempList=substring(@tempList,charindex(',',@tempList)+1,len(@tempList))
end
set @list=substring(@list,charindex(',',@list)+1,len(@list))
end
print @result


运行结果为:
1,2,5,9,3,4,8,10,7,11,
ReyZhang 2008-05-06
  • 打赏
  • 举报
回复

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: zhangl
-- Create date: 2008-5-6
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE ProcTest_Proc
@list varchar(1000)
AS
BEGIN

SET NOCOUNT ON

Declare @tablelist varchar(8000)
set @tablelist=N''

--根据id组合tablelist列的所有值
select @tablelist=@tablelist+tablelist+',' from T_CheckTable where id in (select * from dbo.Split_Fun(@list,','))

--定义表变量
Declare @t table(tableid varchar(10))


--将分割后的字符存放的表变量中
insert into @t
select * from dbo.Split_Fun(@tablelist,',')

--去掉重复的,取其中的唯一值
Declare @id varchar(1000)
select @id=@id+distinct(tableid)+',' from @t


--取唯一值
select @id

END
GO



其中用到一个分割串的函数 dbo.Split_Fun() ,函数如下







--添加表值函数
-- =============================================
-- Author: zhangl
-- ALTER date: 2008-1-14
-- Description: 实现split功能 的函数
-- Test: select dbo.Split_Fun(regionid,',') from userauthority where userno=36
-- =============================================
create function dbo.Split_Fun(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))

as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>''
insert @temp values(@SourceSql)
return
end


lz试试吧
javabuilder9 2008-05-06
  • 打赏
  • 举报
回复
则取ID=1 tablelist=1,2,4,5
ID=2 .........=1,2,5,7,9
ID=3 ..........=1,2,8,9,12

然后组合 tablelist 取其中的唯一值 意思是 tablelist=1,2,4,5 +1,2,5,7,9 +1,2,8,9,12
然后 再取这些组合的tablelist=1,2,4,5,7,9,12
datahandler2 2008-05-06
  • 打赏
  • 举报
回复
看你哪个是你强项。你就用那个先处理成简单的。比如说你SQL比较不会,那你就先用.net处理。再交给SQL。
复杂问题简单化。很有必要
wzq6511 2008-05-06
  • 打赏
  • 举报
回复
http://space.flash8.net/space/html/13/18713_itemid_343495.html
lovehongyun 2008-05-06
  • 打赏
  • 举报
回复
4楼.你确定楼主想这样??

lovehongyun 2008-05-06
  • 打赏
  • 举报
回复
没看明白..
wzq6511 2008-05-06
  • 打赏
  • 举报
回复
用临时表作为数组
create function f_split(@c varchar(2000),@split varchar(2))
returns @t table(col varchar(20))
as
begin

while(charindex(@split,@c)<>0)
begin
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1))
set @c = stuff(@c,1,charindex(@split,@c),'')
end
insert @t(col) values (@c)
return
end
go

select * from dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',')

drop function f_split
col
--------------------
dfkd
dfdkdf
dfdkf
dffjk

(所影响的行数为 4 行)



地下室小红叔 2008-05-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 javabuilder9 的帖子:]
然后组合 tablelist 取其中的唯一值
[/Quote]

你是指它的值取相或关系后的结果是不?
live_7sky 2008-05-06
  • 打赏
  • 举报
回复
说得不够清楚
javabuilder9 2008-05-06
  • 打赏
  • 举报
回复
T_CheckTable的字段为
ID TableList
1 1,2,4,5
2 1,2,5,7,9
3 1,2,8,9,12
软件概述 UG(Unigraphics NX)是一款由西门子(Siemens PLM Software)开发的交互式CAD/CAM/CAE系统。作为全球领先的产品工程解决方案,它集成了产品设计、工程仿真与制造加工于一体。其功能强大且应用广泛,能够轻松实现各种复杂实体和造型的构造,为模具、汽车、航空航天及通用机械等行业提供了高性能的机械设计与制图灵活性。 软件基础信息 • 支持系统: 64位 Windows 10、Windows 11 核心功能模块 一、创新设计:高效、灵活、无缝协同 全链路产品设计 涵盖从2D布局、3D建模、装配设计到图纸文档记录的各个环节,大幅提升设计吞吐量,缩短交付周期超35%。 强大的同步建模技术 打破数据壁垒,可无缝导入并直接修改来自其他CAD系统的几何模型,是跨平台协同设计的理想选择。 复杂装配管理 专为大型复杂产品打造,即使面对成千上万的零件也能从容应对,快速识别并解决数字样机中的干涉等问题。 集成设计验证 内置自动验证功能,实时监控设计是否符合公司及行业标准;结合PLM数据可视化合成,辅助工程师做出更明智的决策。 二、综合仿真(Simcenter 3D):精准预测,降低试错成本 极速前后处理 依托先进的几何引擎,将强大的析命令与几何编辑紧密集成,相比传统有限元工具,可缩短高达70%的仿真建模时间。 全方位结构析 在同一环境中集成线性静力学、动态、疲劳及非线性析,底层由业界顶尖的NX Nastran解算器提供支持,确保计算的高精度与可靠性。 声学与热管理析 提供内外声学仿真以优化音质、降低噪音;具备一流的热传导仿真能力,帮助电子产品和工业机械实现最佳热管理方案。 多物理场耦合 简化了结构动力学、热传导、流体流动等复杂物理现象的模拟过程,消除外部数据传输错误,真实还原产品运行工况。 三、智能制造(CAM):打通从计划到车间的数字主线 全面的制造解决方案 提供从工装设计、CAM编程到机床控制器(如Sinumerik)的一体化支持,助力制定更科学的生产决策。 深度集成的PLM环境 借助Teamcenter实现数据和流程的统一管理,避免多数据库冲突,支持重用验证过的加工工艺与刀具库。 车间级互联 通过DNC系统与车间无缝对接,直接将加工数据和刀具清单下发至CNC机床,实现计划与生产的紧密结合。 提质增效 优化NC编程与刀具路径,提升表面精加工水平与零件精度;减少人为错误,显著提高新机床部署成功率及制造资源利用率。 总结 UG NX 2023作为一款集成化的产品工程解决方案,通过其强大的设计、仿真和制造功能,为现代制造业提供了完整的数字化产品开发平台。无论是复杂产品的设计验证,还是精密制造的流程优化,UG NX 2023都能为工程师团队提供高效、可靠的解决方案,助力企业提升产品创新能力和市场竞争力。 适用领域 模具设计、汽车制造、航空航天、通用机械、消费电子等
软件概述 UG(Unigraphics NX)是一款由西门子(Siemens PLM Software)开发的交互式CAD/CAM/CAE系统。作为全球领先的产品工程解决方案,它集成了产品设计、工程仿真与制造加工于一体。其功能强大且应用广泛,能够轻松实现各种复杂实体和造型的构造,为模具、汽车、航空航天及通用机械等行业提供了高性能的机械设计与制图灵活性。 软件基础信息 • 支持系统: 64位 Windows 10、Windows 11 核心功能模块 一、创新设计:高效、灵活、无缝协同 全链路产品设计 涵盖从2D布局、3D建模、装配设计到图纸文档记录的各个环节,大幅提升设计吞吐量,缩短交付周期超35%。 强大的同步建模技术 打破数据壁垒,可无缝导入并直接修改来自其他CAD系统的几何模型,是跨平台协同设计的理想选择。 复杂装配管理 专为大型复杂产品打造,即使面对成千上万的零件也能从容应对,快速识别并解决数字样机中的干涉等问题。 集成设计验证 内置自动验证功能,实时监控设计是否符合公司及行业标准;结合PLM数据可视化合成,辅助工程师做出更明智的决策。 二、综合仿真(Simcenter 3D):精准预测,降低试错成本 极速前后处理 依托先进的几何引擎,将强大的析命令与几何编辑紧密集成,相比传统有限元工具,可缩短高达70%的仿真建模时间。 全方位结构析 在同一环境中集成线性静力学、动态、疲劳及非线性析,底层由业界顶尖的NX Nastran解算器提供支持,确保计算的高精度与可靠性。 声学与热管理析 提供内外声学仿真以优化音质、降低噪音;具备一流的热传导仿真能力,帮助电子产品和工业机械实现最佳热管理方案。 多物理场耦合 简化了结构动力学、热传导、流体流动等复杂物理现象的模拟过程,消除外部数据传输错误,真实还原产品运行工况。 三、智能制造(CAM):打通从计划到车间的数字主线 全面的制造解决方案 提供从工装设计、CAM编程到机床控制器(如Sinumerik)的一体化支持,助力制定更科学的生产决策。 深度集成的PLM环境 借助Teamcenter实现数据和流程的统一管理,避免多数据库冲突,支持重用验证过的加工工艺与刀具库。 车间级互联 通过DNC系统与车间无缝对接,直接将加工数据和刀具清单下发至CNC机床,实现计划与生产的紧密结合。 提质增效 优化NC编程与刀具路径,提升表面精加工水平与零件精度;减少人为错误,显著提高新机床部署成功率及制造资源利用率。 总结 UG NX 2023作为一款集成化的产品工程解决方案,通过其强大的设计、仿真和制造功能,为现代制造业提供了完整的数字化产品开发平台。无论是复杂产品的设计验证,还是精密制造的流程优化,UG NX 2023都能为工程师团队提供高效、可靠的解决方案,助力企业提升产品创新能力和市场竞争力。 适用领域 模具设计、汽车制造、航空航天、通用机械、消费电子等

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧