请教大家一个关于存储过程的问题,提供思路也可,谢谢你的帮助!

heyijpn 2001-12-18 10:38:41
CREATE PROCEDURE [viewBS] @monthpos char(2) AS
select @monthpos
from BS_Actual
在上面的存储过程中,我想用@monthpos参数代替字段M1,结果出现错误
难道在存储过程中字段不可以用参数表示吗??只能在where条件中用参数吗?
...全文
79 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
m_cen 2001-12-19
  • 打赏
  • 举报
回复
用动态sql仅限于SQL Server;
对其他DBMS(或者要考虑移植),用判断的方式也不坏.
QuickLeader 2001-12-19
  • 打赏
  • 举报
回复
有道理!比我的建议好!
高,实在是高!
seafo 2001-12-19
  • 打赏
  • 举报
回复
用动态sql
CREATE PROCEDURE [viewBS] @monthpos char(2)
AS
declare @sql varchar(255)
set @sql="select "+@monthpos+' from BS_Actual'
exec(@sql)
蓝天 2001-12-19
  • 打赏
  • 举报
回复
昨天写的例子

drop table test_2
go
create table test_2 ( a int , a1 int, a2 int , b datetime)
go
insert into test_2 values (3,4,7,getdate())
go
select * from test_2
go
drop PROCEDURE sp_test
go

CREATE PROCEDURE sp_test (@fieldx varchar(20),@testtime DATETIME)
AS
BEGIN
SET NOCOUNT ON
DECLARE @sqlstr VARCHAR(1024)
DECLARE @timeStr VARCHAR(40)
SELECT @timeStr = CAST(@testtime AS VARCHAR)

SELECT @sqlStr ='select '+@fieldx+' from test_2 where b > '+ ''''+@timeStr+''''
print @sqlstr
EXEC(@sqlStr)
SET NOCOUNT OFF
END

go
sp_test 'b','20010101'
go
QuickLeader 2001-12-19
  • 打赏
  • 举报
回复
类似宏替换这样的操作是不可以的,参数只是一个值,输入或输出用。并非只能用在WHERE条件。类似你的需求,可以传入一个参数,如‘M1',然后用CASE语句,当参数是'M1'时,运行SELECT M1 FROM BS_Actual。
mmzxg 2001-12-19
  • 打赏
  • 举报
回复
没怎么用过不敢回答
heyijpn 2001-12-19
  • 打赏
  • 举报
回复
实在是高,给分了!!
相关推荐
发帖
MS-SQL Server

3.4w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2001-12-18 10:38
社区公告
暂无公告