Имя таблицы 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 этому процессу.
Возможно, вы захотите добавить пробелы до и после имени таблицы, иначе это будет выглядеть так:
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