我正在编写存储过程。但是在此过程中表名是动态的。我想从变量表中获取行号。但是我会在哪里设置@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
提前致谢
答案 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