Имя таблицы SQL 2000 как переменная в хранимой процедуре - PullRequest
0 голосов
/ 16 марта 2009

Название таблицы:
RM_master

Поля:
cust_no
acct_no
код_акта

Вопрос, я хочу сделать таблицу 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 ]

1 голос
/ 16 марта 2009

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

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

0 голосов
/ 16 марта 2009

Вам нужен пробел между "ОТ" и "ГДЕ" в вашем динамическом sql запросе

Вместо

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

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

SET @RMRM = N'SELECT * FROM ' + @MASTER + N' WHERE ACCT_NO =' + @ACCTNUMBER
0 голосов
/ 16 марта 2009

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

SELECT * FROMTABLENAMEWHERE ACCT_NO =0
0 голосов
/ 16 марта 2009

Вы не назначаете значение @ master.

...