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

cMi*_*nor 4 count sql-server-2008

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

我正在调用这样的程序:

EXEC TEST.dbo.myProc nameOfTable
Run Code Online (Sandbox Code Playgroud)

程序类似于:

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

    SELECT   @Nval  = COUNT(*) FROM @table_name 
END 
Run Code Online (Sandbox Code Playgroud)

执行时我收到错误:

消息156,级别15,状态1,过程nLQ,第57行
关键字"FROM"附近的语法不正确.

我该如何分配变量@Nval

Mit*_*eat 15

您不能像这样参数化表名FROM @table_name.唯一的方法是执行动态TSQL.

在您这样做之前,请阅读:动态SQL的诅咒和祝福


小智 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
Run Code Online (Sandbox Code Playgroud)