以表名作为参数的存储过程

时间:2011-05-04 00:23:00

标签: sql-server-2008 count

我有一个存储过程,我想将该表的行数分配给变量,然后使用该变量。

我正在调用这样的程序:

EXEC TEST.dbo.myProc nameOfTable

程序类似于:

CREATE PROCEDURE myProc @table_name varchar(1024) AS
BEGIN
    DECLARE  @Nval INT
    /*  SOME INSTRUCTIONS */

    SELECT   @Nval  = COUNT(*) FROM @table_name 
END 

执行时我收到错误:

  

Msg 156,Level 15,State 1,Procedure nLQ,Line 57
  关键字“FROM”附近的语法不正确。

我如何分配变量@Nval

2 个答案:

答案 0 :(得分:15)

您不能像FROM @table_name那样参数化表名。唯一的办法就是执行动态TSQL。

在您这样做之前,请阅读:The Curse and Blessings of Dynamic SQL

答案 1 :(得分:11)

试试这个

ALTER PROCEDURE [dbo].[sp_tablenametest]
@table_name varchar(50),
@PMId int,
@ValueEq int

AS
BEGIN
SET NOCOUNT ON;

DECLARE @cmd AS NVARCHAR(max)
SET @cmd = N'SELECT * FROM ' + @table_name + 
' WHERE Column1 = ''' + @PMId +  '''' +
' AND Column2= ''' + @ValueEq + ''''

EXEC sp_executesql @cmd 
END