如何在sql语句中执行存储过程?

wtoeb 2008-10-22 11:54:28
比如:
有一个存储过程的名称是:abc(@tbl nvarchar(255),@sid int,@cateid nvarchar(255)),有三个参数要传入。
现在sql语句是:
select * from info
order by abc('info',sid,cateid)
大致意思是这个,abc就是执行order功能的,
...全文
838 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Novelty 2008-10-24
  • 打赏
  • 举报
回复
是的,我测试了一下,是我搞错了,不好意思。 建议你尝试建一个排序字段来实现,用触发器对该字段进行更新。
wtoeb 2008-10-23
  • 打赏
  • 举报
回复
创建一个排序函数,函数不能实现动态的表名传入咯。
wtoeb 2008-10-23
  • 打赏
  • 举报
回复
存储过程里面,我再慢慢研究,请说说在SQL里面怎么调用这个存储过程,谢谢。急用。
-狙击手- 2008-10-23
  • 打赏
  • 举报
回复
就为你这个表创建一个排序函数也不过份呀
-狙击手- 2008-10-23
  • 打赏
  • 举报
回复
就你上面的动态SQL,@tbl 仍然没用上呀
wtoeb 2008-10-23
  • 打赏
  • 举报
回复
如果用函数,又不能实现动态表传入,因为@tbl不是一定的名称。
内容如下:
CREATE PROCEDURE dbo.CateSote(@tbl NVARCHAR(255), @snID int, @CateID NVARCHAR(255))
AS
begin
execute
('
declare @str varchar(8000)
declare @num varchar(10)
declare @s varchar(10)
declare @len int,@start int,@end int

select @str='''',@s='''',@num='''',@len=12,@start=12,@end=9
if len(@CateID)=8
set @str=right(''000''+rtrim(@snID),3)+rtrim(@CateID)
else
begin
SELECT @num=right(''000''+rtrim(snID),3) from @tbl where left(@CateID,8)=CateID
set @str=rtrim(@num)+rtrim(@CateID)
set @s=substring(@CateID,9,4)
while len(@s)>0
begin
select @num=right(''000''+rtrim(snID),3) from @tbl where left(@CateID,@start)=CateID
set @str=stuff(@str,@len,0,@num)
select @len=@len+8,@start=@start+4,@end=@end+4
select @s=substring(@CateID,@end,4)
end
end
return @str'
)
end
GO
lancherSer 2008-10-23
  • 打赏
  • 举报
回复
学习。。。
wtoeb 2008-10-23
  • 打赏
  • 举报
回复
Novelty,这样不行,提示:
只有函数和扩展存储过程才能从函数内部执行。
jiang5311 2008-10-23
  • 打赏
  • 举报
回复
学习……
lonlyhawk 2008-10-23
  • 打赏
  • 举报
回复

建议将存储过程的return内容存到##t中,
查询时:select * from info order by (select 排序字符 from ##t)
Novelty 2008-10-23
  • 打赏
  • 举报
回复
不建议这样排序,如果数据量大的话效率比较低,要考虑建立一个冗余字段来排序。
Novelty 2008-10-23
  • 打赏
  • 举报
回复
用函数可以实现动态表名传入啊。

create function dbo.CateSote(@tbl NVARCHAR(255), @snID int, @CateID NVARCHAR(255))
returns nvarchar(30)
AS
begin
declare @tmp_str nvarchar(30)
declare @sqltext nvarchar(1000)
set @sqltext =
'
declare @str varchar(8000)
declare @num varchar(10)
declare @s varchar(10)
declare @len int,@start int,@end int

select @str='''',@s='''',@num='''',@len=12,@start=12,@end=9
if len(@CateID)=8
set @str=right(''000''+rtrim(@snID),3)+rtrim(@CateID)
else
begin
SELECT @num=right(''000''+rtrim(snID),3) from @tbl where left(@CateID,8)=CateID
set @str=rtrim(@num)+rtrim(@CateID)
set @s=substring(@CateID,9,4)
while len(@s)>0
begin
select @num=right(''000''+rtrim(snID),3) from @tbl where left(@CateID,@start)=CateID
set @str=stuff(@str,@len,0,@num)
select @len=@len+8,@start=@start+4,@end=@end+4
select @s=substring(@CateID,@end,4)
end
end
'

execute sp_executesql @sqltext,N'@str nvarchar(30) out',@tmp_str out
return @tmp_str
end
-狙击手- 2008-10-22
  • 打赏
  • 举报
回复
用函数还差不多
wtoeb 2008-10-22
  • 打赏
  • 举报
回复
返回的是一个排序的字符串。
-狙击手- 2008-10-22
  • 打赏
  • 举报
回复
abc 返回什么 ?
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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