如何编写在存储过程中使用动态表名选择查询?

时间:2016-10-25 07:10:17

标签: sql sql-server stored-procedures

我正在编写存储过程。但是在此过程中表名是动态的。我想从变量表中获取行号。但是我会在哪里设置@rownumber并返回选择查询?

Create Proc update_eMail
    (@tablename nvarchar(50),
     @columnname nvarchar(50))
AS
Begin 

    Declare @q_getrowNumber NVARCHAR(MAX)
    Declare @rownumber int
    SELECT @rownumber =  Count(ID) FROM  quotename(@tablename) // doesnt work

END

提前致谢

3 个答案:

答案 0 :(得分:4)

这是使用动态sql实现目标的一种方法

declare @sql NVARCHAR(4000)= ''

set @sql = 'SELECT @rownumber = Count(ID) FROM '+ quotename(@tablename) 

exec sp_executesql @sql, N'@rownumber int output',@rownumber output

答案 1 :(得分:3)

您为动态查询编写了错误的过程 试试这个。它会起作用。

ALTER PROC update_eMail(@tablename NVARCHAR(50))
AS
BEGIN 
DECLARE @RowNumber NVARCHAR(MAX)=''

  set @RowNumber='select Count(ID) FROM '+@tablename+''
  exec(@RowNumber)
END

或在您的查询中尝试以下代码

ALTER PROC update_eMail1
(
   @tablename NVARCHAR(50)
)
AS
BEGIN
     DECLARE @sql NVARCHAR(4000)= '',@rownumber INT
     SET @sql = 'SELECT @rownumber = Count(ID) FROM '+quotename(@tablename) 

   EXEC sp_executesql @sql, N'@rownumber int output',@rownumber OUTPUT

   SELECT @rownumber

END

答案 2 :(得分:0)

这对你来说最简单:

Create Proc update_eMail
    @tablename nvarchar(50)
AS
Begin 
    EXEC ( 'SELECT Count(ID) FROM '+@tablename+'')
END