#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'
Надеюсь, это поможет.