动态sql问题

EnnoMiao 2014-06-04 05:49:31

CREATE PROC procGetEntity(
@topicid NVARCHAR(100),
@filter NVARCHAR(400)
)
AS
DECLARE @ROWS INT
DECLARE @sqlGetRowNumber NVARCHAR(1000)
SET @sqlGetRowNumber=N' select @rows=rownumber from (select rownumber=row_number()over(order by createtime),* from topic) k where TopicID='''+@topicid+'''and' +@filter

--接下来用@rows做其他操作
...

如果我把 DECLARE @ROWS INT 放到
 SET @sqlGetRowNumber=N'DECLARE @ROWS INT  select @rows=rownumb...


外面就取不到rows

请问这个怎么做,才能取到rows 我是mssql2008
...全文
181 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2014-06-04
  • 打赏
  • 举报
回复

-- 建测试表
create table topic(id int)

-- 产生40条记录
insert into topic(id)
 select number 
 from master.dbo.spt_values
 where type='P' and number between 1 and 40


declare @ROWS int
declare @sqlGetRowNumber nvarchar(1000)  

set @sqlGetRowNumber=N'select @ROWS=count(1) from topic'

exec sp_executesql @sqlGetRowNumber,N'@ROWS int output',@ROWS=@ROWS output

select @ROWS 'ROWS_Value'

/*
ROWS_Value
-----------
40

(1 row(s) affected)
*/
习惯性蹭分 2014-06-04
  • 打赏
  • 举报
回复


alter PROC procGetEntity(
  @topicid NVARCHAR(100),
  @filter NVARCHAR(400),
  @ROWS int output
 )
 AS
	--DECLARE @ROWS INT
  DECLARE @sqlGetRowNumber NVARCHAR(1000)  
  SET @sqlGetRowNumber=N' select @rows=rownumber from  (select rownumber=row_number()over(order by createtime),* 
  from topic) k  where TopicID='''+@topicid+'''and ' +@filter  
  exec sp_executesql @sqlGetRowNumber,N'@rows int output',@rows output
  
  go
  declare @rows int
  exec procGetEntity  5,' 1=1 ',@rows output
shinger126 2014-06-04
  • 打赏
  • 举报
回复
应该还有更简单的方法的,我只会这种
spiritofdragon 2014-06-04
  • 打赏
  • 举报
回复
用EXECUTE sp_executesql ,里面带个输出参数,见下面SQL,F1的帮助示例

DECLARE @IntVariable int;
DECLARE @SQLString nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);
DECLARE @max_title varchar(30);
SET @IntVariable = 197;
SET @SQLString = N'SELECT @max_titleOUT = max(JobTitle) 
   FROM AdventureWorks2008R2.HumanResources.Employee
   WHERE BusinessEntityID = @level';
SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT';

EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @max_titleOUT=@max_title OUTPUT;
SELECT @max_title;
shinger126 2014-06-04
  • 打赏
  • 举报
回复
CREATE PROC procGetEntity( @topicid NVARCHAR(100), @filter NVARCHAR(400) ) AS create table #t (rows int) DECLARE @ROWS INT DECLARE @sqlGetRowNumber NVARCHAR(1000) SET @sqlGetRowNumber=N' insert into #t select rownumber from (select rownumber=row_number()over(order by createtime),* from topic) k where TopicID='''+@topicid+'''and' +@filter exec executesql @sqlGetRowNumber select @rows=rows from #t

34,590

社区成员

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

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