передача параметров для вставки запроса

#asp.net #sql #sql-server

#asp.net #sql #sql-сервер

Вопрос:

 DECLARE @SQL1 VARCHAR(MAX)
SET @SQL1='SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer=' CAST(@ResponsibleEngineer AS VARCHAR(500)) ''
EXEC(@SQL1)
IF @@ROWCOUNT>0
BEGIN
SET @Result='EXIST'
  

приведенный выше запрос не выполняется из-за того, как я передаю параметр @ResponsibleEngineer в запрос. ошибка "Invalid column name TEST" . TEST это значение, которое я передаю в качестве значения параметра
@ResponsibleEngineer , и такого столбца, как TEST в таблице, нет.в чем ошибка при передаче параметра для вставки запроса?

Ответ №1:

Вам нужны метки речи вокруг параметра:

 'SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer=''' CAST(@ResponsibleEngineer AS VARCHAR(500)) ''''
  

В противном случае вы генерируете:

 SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer=TEST'
  

Поэтому он ищет столбец TEST . Имея параметр в метках речи, которые вы генерируете:

 SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer='TEST'
  

Затем этот запрос запустит WHERE предложение, в котором ResponsibleEngineer столбец равен строковому значению TEST

Комментарии:

1. 1 Это сработало бы, у меня возник вопрос: «Почему бы не использовать параметризованный запрос?» когда я увидел этот вопрос.

Ответ №2:

вы должны объявить @ResponsibleEngineer и установить его значение. В основном используется как переменная.

 DECLARE @ResponsibleEngineer varchar(10)
SET @ResponsibleEngineer = 'my test'
  

Ответ №3:

Попробуйте это:

 DECLARE @SQL1 VARCHAR(MAX)
    SET @SQL1='SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer=''' CAST(@ResponsibleEngineer AS VARCHAR(500)) ''''
    EXEC(@SQL1)
    IF @@ROWCOUNT>0
    BEGIN
    SET @Result='EXIST'
  

Ответ №4:

Ваш запрос преобразуется в

  SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer=TEST
  

Вам нужно получить следующее:

  SELECT * FROM tblResponsibleEngineer WHERE ResponsibleEngineer='TEST'
  

Ответ №5:

Удалите пробелы вокруг вашего выбора. Краткий пример

 DECLARE cnt int
SELECT cnt= count(*) FROM tblResponsibleEngineer WHERE ResponsibleEngineer='CAST(@ResponsibleEngineer AS VARCHAR(500))'
IF cnt>0
BEGIN
  SET @Result='EXIST'
  

Надеюсь, это поможет.