帮忙看下存储过程动态执行SQL的问题

ChinaXtHuLang 2012-10-29 06:18:34
存储过程如下:

ALTER PROC UpdateSpecial(@id INT)
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@oSQL NVARCHAR(1000),
@CountSQL NVARCHAR(1000),
@CountNum INT

SET @CountSQL = 'Select Count(0) From m_data Where m_specialid = '
+ Cast(@id AS NVARCHAR) + ' '

EXEC Sp_executesql
@CountSQL,
N'@CountNum int out',
@CountNum out

SET @iSQL = 'Update m_my_special Set m_videonum = '
+ Cast(@CountNum AS NVARCHAR)
+ ' Where m_id = ' + Cast(@id AS NVARCHAR)
+ ' '

EXEC Sp_executesql @iSQL
RETURN @CountNum
END

go


现在的问题是。不执行第2个SQL语句。也就是:
SET @iSQL = 'Update m_my_special Set m_videonum = '
+ Cast(@CountNum AS NVARCHAR)
+ ' Where m_id = ' + Cast(@id AS NVARCHAR)
+ ' '

EXEC Sp_executesql @iSQL


是不是我哪里写错了。。
我想把第一个SQL返回的值。更新到另外一个SQL里面去。
...全文
167 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
引用 15 楼 的回复:
ALTER PROC UpdateSpecial(@id INT)
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@CountNum INT

SELECT @CountNum = Count(0)
FROM m_data
WHERE m_specialid = @id

SET @iSQL = 'Up……


……
[/Quote]
那不叫返回值。
ChinaXtHuLang 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 的回复:]
ALTER PROC UpdateSpecial(@id INT)
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@CountNum INT

SELECT @CountNum = Count(0)
FROM m_data
WHERE m_specialid = @id

SET @iSQL = 'Up……
[/Quote]

这好。。谢谢。。结贴去。
ChinaXtHuLang 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
引用 11 楼 的回复:
@id INT,@rn int output

两个参数。第2个。我应该输入神马啊?

不用输入啊。你声明个参数去接里面返回的就成了。
DECLARE @参数2 INT
EXEC 过程名 参数1,@参数2 OUTPUT
SELECT @参数2
[/Quote]

谢谢。。可以了。。感觉好麻烦。。。
最后的代码:

DECLARE @i INT
EXEC UpdateSpecial 19,@i OUTPUT
SELECT @i


ALTER PROC Updatespecial(@id INT,
@rn INT output)
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@oSQL NVARCHAR(1000),
@CountSQL NVARCHAR(1000),
@CountNum INT

SET @CountSQL =
'Select @CountNum=Count(0) From m_data Where m_specialid = '
+ Cast(@id AS NVARCHAR(100)) + ' '

EXEC Sp_executesql
@CountSQL,
N'@CountNum int out',
@CountNum out

SET @iSQL = 'Update m_my_special Set m_videonum = '
+ Cast(@CountNum AS NVARCHAR)
+ ' Where m_id = ' + Cast(@id AS NVARCHAR)
+ ' '

EXEC Sp_executesql
@iSQL

SET @rn= @CountNum
END

go


难道在存储过程里面。执行SQL后。返回值。必须要这么做?
开启时代 2012-10-29
  • 打赏
  • 举报
回复
ALTER PROC UpdateSpecial(@id INT)
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@CountNum INT

SELECT @CountNum = Count(0)
FROM m_data
WHERE m_specialid = @id

SET @iSQL = 'Update m_my_special Set m_videonum ='
+ Cast(@CountNum AS NVARCHAR) + ' Where m_id = '
+ Cast(@id AS NVARCHAR)

EXEC Sp_executesql
@iSQL

select @CountNum
END
ChinaXtHuLang 2012-10-29
  • 打赏
  • 举报
回复
。。。。。。。。。。。
值。始终返回不回来。
只是提示响应的行数。
SQL77 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
@id INT,@rn int output

两个参数。第2个。我应该输入神马啊?
[/Quote]
不用输入啊。你声明个参数去接里面返回的就成了。
DECLARE @参数2 INT
EXEC 过程名 参数1,@参数2 OUTPUT
SELECT @参数2
开启时代 2012-10-29
  • 打赏
  • 举报
回复
UpdateSpecial @id=X,@countnum=0 试下
ChinaXtHuLang 2012-10-29
  • 打赏
  • 举报
回复
@id INT,@rn int output

两个参数。第2个。我应该输入神马啊?
SQL77 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
引用 8 楼 的回复:
ALTER PROC UpdateSpecial
@id INT, @CountNum INT output
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000)

SELECT @CountNum = Count(0)
……


这种。我不会执行啊
我咋执行啊???
[/Quote]
你最后RETURN 那个肯定不行呐


ALTER PROC UpdateSpecial(@id INT,@rn int output) AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@oSQL NVARCHAR(1000),
@CountSQL NVARCHAR(1000),
@CountNum INT

SET @CountSQL = 'Select @CountNum=Count(0) From m_data Where m_specialid = '
+ Cast(@id AS NVARCHAR(100)) + ' ' EXEC Sp_executesql
@CountSQL,
N'@CountNum int out',
@CountNum out

SET @iSQL = 'Update m_my_special Set m_videonum = '
+ Cast(@CountNum AS NVARCHAR)
+ ' Where m_id = ' + Cast(@id AS NVARCHAR)
+ ' '

EXEC Sp_executesql @iSQL
set @rn= @CountNum END

go
ChinaXtHuLang 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
ALTER PROC UpdateSpecial
@id INT, @CountNum INT output
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000)

SELECT @CountNum = Count(0)
……
[/Quote]

这种。我不会执行啊
我咋执行啊???
开启时代 2012-10-29
  • 打赏
  • 举报
回复
ALTER PROC UpdateSpecial
@id INT, @CountNum INT output
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000)

SELECT @CountNum = Count(0)
FROM m_data
WHERE m_specialid = @id

SET @iSQL = 'Update m_my_special Set m_videonum ='
+ Cast(@CountNum AS NVARCHAR) + ' Where m_id = '
+ Cast(@id AS NVARCHAR)

EXEC Sp_executesql @iSQL

RETURN @CountNum
END
ChinaXtHuLang 2012-10-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
ALTER PROC UpdateSpecial(@id INT)
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@oSQL NVARCHAR(1000),
@CountSQL NVARCHAR(1000),
@CountNum INT

SET @CountSQL = 'Select @CountNum=Coun……
[/Quote]

还是没有返回值。返回的是响应行数

(所影响的行数为 1 行)
SQL77 2012-10-29
  • 打赏
  • 举报
回复
ALTER PROC UpdateSpecial(@id INT)
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@oSQL NVARCHAR(1000),
@CountSQL NVARCHAR(1000),
@CountNum INT

SET @CountSQL = 'Select @CountNum=Count(0) From m_data Where m_specialid = '
+ Cast(@id AS NVARCHAR(100)) + ' '
EXEC Sp_executesql
@CountSQL,
N'@CountNum int out',
@CountNum out

SET @iSQL = 'Update m_my_special Set m_videonum = '
+ Cast(@CountNum AS NVARCHAR)
+ ' Where m_id = ' + Cast(@id AS NVARCHAR)
+ ' '

EXEC Sp_executesql @iSQL
RETURN @CountNum
END

go



ChinaXtHuLang 2012-10-29
  • 打赏
  • 举报
回复
还是不行。。不能返回值。。
现在返回的是响应的行数:
ALTER PROC UpdateSpecial(@id INT) 
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@CountNum INT

SELECT @CountNum = Count(0)
FROM m_data
WHERE m_specialid = @id

SET @iSQL = 'Update m_my_special Set m_videonum ='
+ Cast(@CountNum AS NVARCHAR) + ' Where m_id = '
+ Cast(@id AS NVARCHAR)

EXEC Sp_executesql
@iSQL

RETURN @CountNum
END
ChinaXtHuLang 2012-10-29
  • 打赏
  • 举报
回复
哎。不是我糊涂。。是你写错了。我还得返回值啊。
一个SQL
你这样是不能返回值。
开启时代 2012-10-29
  • 打赏
  • 举报
回复
ALTER PROC UpdateSpecial(@id INT)
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@CountNum INT
Select @CountNum=Count(0) From m_data Where m_specialid =@id

SET @iSQL = 'Update m_my_special Set m_videonum ='+ @CountNum +' Where m_id = ' + Cast(@id AS NVARCHAR)

EXEC Sp_executesql @iSQL
RETURN @CountNum
END
ChinaXtHuLang 2012-10-29
  • 打赏
  • 举报
回复
谢谢。。哎。今天忙的糊涂了。忘记直接这样更新了。。
但是。出错了。。

提示:过程 'UpdateSpecial' 试图返回状态值 NULL,但不允许这样做。将改为返回状态值 0。
开启时代 2012-10-29
  • 打赏
  • 举报
回复
ALTER PROC UpdateSpecial(@id INT)
AS
BEGIN
DECLARE @iSQL NVARCHAR(1000),
@CountNum INT

SET @iSQL = 'Update m_my_special Set m_videonum =(Select Count(0) From m_data Where m_specialid = '
+ Cast(@id AS NVARCHAR) + ')'
+ ' Where m_id = ' + Cast(@id AS NVARCHAR)

EXEC Sp_executesql @iSQL
RETURN @CountNum
END

34,575

社区成员

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

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