2011-05-04 29 views
3

我有一个存储过程,我想将该表的行数分配给一个变量,并稍后使用该变量。以表名为参数的存储过程

我打电话喜欢的程序:

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
Incorrect syntax near the keyword 'FROM'.

我将如何分配变量@Nval

回答

10

试试这个

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 
15

你不能参数化这样的表名,FROM @table_name。唯一的方法是执行动态TSQL。

之前,你这样做,写着:The Curse and Blessings of Dynamic SQL

+0

如果我这样做dinamically,我如何分配计数可变'设置\t @Statement =“SELECT COUNT( *)FROM'+ @table_name; \t EXEC(@Statement);'我在哪里恢复值? – cMinor 2011-05-04 01:27:12