SQL 2000表名称作为存储过程中的变量

时间:2009-03-16 13:43:06

标签: sql stored-procedures parameters dynamic-sql tablename

表名:
RM_master

字段:
CUST_NO
acct_no
acct_code

问题是,我想将表RM_master作为存储过程中参数的变量吗?

这没有语法错误,但是当我在查询分析器中通过右键单击存储过程名称执行此操作时,未识别变量表名称(RM_master) 这是我的存储过程;

CREATE PROCEDURE RMQUERY

  @cusnumber  nvarchar (255) = '' ,
  @acctnumber nvarchar (255) = '' ,
  @master nvarchar (255) = ''

AS

BEGIN

SET @CUSNUMBER = @CUSNUMBER
DECLARE @RMRM AS NVARCHAR (255)
SET @RMRM =n'SELECT * FROM' + @MASTER + 'WHERE ACCT_NO =' + @ACCTNUMBER

EXEC RMQUERY2 
END

4 个答案:

答案 0 :(得分:1)

不建议使用,因为您只是在存储过程中创建动态sql。这打开了sql注入后门,因为你没有概述输入创建的sql:参数值永远不应该用作查询元素本身,而只能作为查询中的值(可以动态创建,但总是应该使用参数) )。

虽然如果必须,您应该使用外部存储过程sp_executesql并将sql提供给该proc。

答案 1 :(得分:0)

您没有为@master分配值。

答案 2 :(得分:0)

您可能希望在表名之前和之后添加空格,否则它将如下所示:

SELECT * FROMTABLENAMEWHERE ACCT_NO =0

答案 3 :(得分:0)

动态sql查询中需要“FROM”和“WHERE”之间的空格

而不是

SET @RMRM =n'SELECT * FROM' + @MASTER + 'WHERE ACCT_NO =' + @ACCTNUMBER

你应该做

SET @RMRM = N'SELECT * FROM ' + @MASTER + N' WHERE ACCT_NO =' + @ACCTNUMBER