简体   繁体   English

如何在存储过程中编写带有动态表名称的Select查询?

[英]How to write Select query with dynamic table name in Stored Procedure?

I am writing a stored-procedure. 我正在写一个存储过程。 But the table name is dynamic in this procedure. 但是表名在此过程中是动态的。 I want to get row number from my variable table. 我想从变量表中获取行号。 But where will I set @rownumber with return of select query? 但是我@rownumber在哪里设置@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

Thanks in advance 提前致谢

Here is one way to achieve the goal using dynamic sql 这是使用动态sql实现目标的一种方法

declare @sql NVARCHAR(4000)= ''

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

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

You write wrong Procedure for dynamic query Try This. 您为动态查询写了错误的过程试试看。 It will Work. 它会工作。

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

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

OR Try below Code in your Query 或在查询中尝试以下代码

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

This one will be easiest for you: 这对您来说最简单:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM