这是不是有点异想天开了。

orjava 2004-08-02 05:56:34
存储过程定义如下:
CREATE PROCEDURE oneProc
(
@var1 int,
@var2 int,
@Express nvarcahr(150)
)
AS
DECLARE @var3 int
Exec (@Express) /* 有办法把变量直接传入到表达式吗? */
Print @var3

上述存储过程在用以下语句执行时出现如下错误,
Exec oneProc 12,13,'SELECT @var3=@var1+@var2)

Must declare the variable '@var3'.

而我想要的结果是:@var3=25,并切输出.
但是在执行时总出现变量没有定义的错误,


请问我该如何解决,先谢谢各位了。

---------------
...全文
145 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
猿来是我 2004-08-03
  • 打赏
  • 举报
回复
当然可以.
CSDMN 2004-08-03
  • 打赏
  • 举报
回复
直接:

declare @sql Nchar(4000)
set @sql=N'SELECT @var3=@var1+@var2'
declare @var3 int
exec sp_executesql @sql,N'@var1 int,@var2 int,@var3 int output',@var1=12,@var2=13,@var3=@var3 out
print @var3

cqdj 2004-08-03
  • 打赏
  • 举报
回复
当然可以,只要你传入的字符串是符合语法的。
orjava 2004-08-03
  • 打赏
  • 举报
回复
先谢谢各位大哥的帮忙。正确的格式如下:
CREATE PROCEDURE oneProc
(
@var1 int,
@var2 int,
@Express nvarcahr(150)
)
AS

DECLARE @var3 int

declare @s nvarchar(4000)
set @s='select @var3=('+@Express+')'
Exec sp_executesql @s,N'·@var1,@var2,@var3 int out',@var1,@var2,@var3 out
Print @var3
go

·再次谢谢各位!·
zjcxc 2004-08-02
  • 打赏
  • 举报
回复
CREATE PROCEDURE oneProc
(
@var1 int,
@var2 int,
@Express nvarcahr(150)
)
AS

DECLARE @var3 int

declare @s nvarchar(4000)
set @s='select @var3=('+@Express+')'
Exec sp_executesql @s,N'@var3 int out',@var3 out
Print @var3
go
pbsql 2004-08-02
  • 打赏
  • 举报
回复
可以,举个例子:
declare @tb varchar(50),@cnt int,@sql nvarchar(4000)
set @cnt=0
set @sql='select @cnt=@cnt+count(*) from '+@tb
exec sp_executesql @sql,N'@cnt int output',@cnt output

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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