【问题标题】:Stored Procedure Select Statement in While LoopWhile循环中的存储过程选择语句
【发布时间】:2016-10-25 10:10:23
【问题描述】:

我想在 While 循环中执行我的选择查询,但它不起作用。

Set @i = 1
    While(@i <= @rowNumber) 

    BEGIN

       Set @q_getoldeMail =  'SELECT Lower('+@columnname+') FROM (
      SELECT ROW_NUMBER() OVER (ORDER BY ID) AS rownumber
          ,ID
          ,[Name]
          ,[Description]
          ,[Status]
          ,[AssignedTo]
          ,[AssignedToMail]
          ,[CC]
      FROM ' + QUOTENAME(@tablename) + ') AS ar Where rownumber = '+@i+''

    exec sp_executesql @q_getoldeMail, N'@get_oldeMail nvarchar(100) output', @get_oldeMail output

      Set @i = @i+1

在其他方面,我尝试在没有 while 循环的情况下执行查询,如下所示:

Set @q_getoldeMail =  'SELECT Lower('+@columnname+') FROM (
          SELECT ROW_NUMBER() OVER (ORDER BY ID) AS rownumber
              ,ID
              ,[Name]
              ,[Description]
              ,[Status]
              ,[AssignedTo]
              ,[AssignedToMail]
              ,[CC]
          FROM ' + QUOTENAME(@tablename) + ') AS ar Where rownumber = '+@i+''

        exec sp_executesql @q_getoldeMail, N'@get_oldeMail nvarchar(100) output', @get_oldeMail output

它也不起作用。我的错误是什么?有没有办法使用 While 循环从 Select 语句中获取值?你能帮帮我吗?

编辑:

我在这段代码中设置了@rowcount 值:

SET @q_getrowNumber = 'SELECT Count(ID)
FROM dbo.' + quotename(@tablename) + ''

execute sp_executesql @q_getrowNumber, N'@rownumber int output', @rownumber output

此代码部分返回一个值 (112)。但是当我改变@rowcount

Set @rowcount = 2

然后代码工作。我尝试转换为整数 @rowcount 但它不起作用

【问题讨论】:

  • “它不起作用。”请解释。您会收到什么样的行为或错误消息?
  • 这是什么意思 - “不工作”。 ???
  • 错误出现在 While 循环中 While (i
  • 你只发布了一半的代码,你还没有解释“不起作用”

标签: sql sql-server stored-procedures procedure


【解决方案1】:

也许这就是你要找的 -

declare @i int = 1
declare @rownumber int = 2
declare @result_set table (value varchar(1000))
declare @q_getoldeMail nvarchar(max)
declare @columnname varchar(100) = 'name'
declare @tablename varchar(100) = 'sys.columns'
--select * from sys.columns

Set @i = 1
While(@i <= @rowNumber)
BEGIN
    Set @q_getoldeMail = 'SELECT Lower('+@columnname+') FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY object_ID) AS rownumber
        ,object_id
        ,name
    FROM ' + (@tablename) + ') AS ar Where rownumber = '+convert(varchar,@i)+''

    insert into @result_set
    exec sp_executesql @q_getoldeMail

    Set @i = @i+1
end

select * from @result_set

【讨论】:

  • 我如何从表中获取最大行数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
相关资源
最近更新 更多