Sql 如何在存储过程中使用动态表名编写Select查询?
我正在写一个存储过程。但在此过程中,表名是动态的。我想从变量表中获取行号。但是如果返回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
@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)