Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在存储过程中使用动态表名编写Select查询?_Sql_Sql Server_Stored Procedures - Fatal编程技术网

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

Sql 如何在存储过程中使用动态表名编写Select查询?,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我正在写一个存储过程。但在此过程中,表名是动态的。我想从变量表中获取行号。但是如果返回select查询,我将在哪里设置@rownumber Create Proc update_eMail (@tablename nvarchar(50), @columnname nvarchar(50)) AS Begin Declare @q_getrowNumber NVARCHAR(MAX) Declare @rownumber int SELECT @ro

我正在写一个存储过程。但在此过程中,表名是动态的。我想从变量表中获取行号。但是如果返回select查询,我将在哪里设置
@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

提前感谢

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

declare @sql NVARCHAR(4000)= ''

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

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

下面是使用动态sql实现此目标的一种方法

declare @sql NVARCHAR(4000)= ''

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

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

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

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

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

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

这一个对您来说最简单:

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

这一个对您来说最简单:

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

我像这样更新,但代码在这一行完成:''exec sp_executesql@sql,N'@rownumer int output',@rownumer output''我的其余代码不工作。我像这样更新,但代码在这一行完成:''exec sp_executesql@sql,N'@rownumer int output',@rownumber输出“”我的其余代码不工作。如果我在“EXEC”代码行之后编写一些代码,它工作吗?一个存储过程中是否只运行一个EXEC方法?是的,它可以工作。您可以在“Exec”代码行之后写入代码。您可以在另一个存储过程中运行多个存储过程,其限制高达32级最大存储过程、函数、触发器或视图嵌套级别已超过(限制32)。如果我在“Exec”代码行之后写入一些代码,是否有效?一个存储过程中是否只运行一个EXEC方法?是的,它可以工作。您可以在“Exec”代码行之后编写代码。您可以在另一个存储过程中运行多个存储过程,其限制高达32级最大存储过程、函数、触发器或视图嵌套级别已超过(限制32)