如何在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功能的,
...全文
786 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 返回什么 ?

34,587

社区成员

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

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