我有一个存储过程,我想将该表的行数分配给变量,然后使用该变量。
我正在调用这样的程序:
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
?
答案 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