Имя таблицы SQL 2000 как переменная в хранимой процедуре

Название таблицы:
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 ответа

Это не рекомендуется, так как вы просто создаете динамический SQL внутри хранимого процесса. Это открывает бэкдоры внедрения SQL, поскольку у вас нет общего представления о том, что SQL создан входными данными: значения параметров никогда не должны использоваться как сами элементы запроса, а только как значения в запросе (который может быть создан динамически, хотя всегда следует использовать параметры).

Хотя, если вам необходимо, вы должны использовать внешний хранимый процесс sp_executesql и передать sql этому процессу.

Вы не присваиваете значение @master.

Возможно, вы захотите добавить пробелы до и после имени таблицы, иначе это будет выглядеть так:

SELECT * FROMTABLENAMEWHERE ACCT_NO =0

Вам нужен пробел между "FROM" и "WHERE" в вашем динамическом SQL-запросе

Вместо

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

Ты должен сделать

SET @RMRM = N'SELECT * FROM ' + @MASTER + N' WHERE ACCT_NO =' + @ACCTNUMBER
Другие вопросы по тегам