почему я должен бросить в хранимой процедуре - PullRequest
2 голосов
/ 10 ноября 2010

в моей хранимой процедуре

, почему я должен приводить курс к varchar (не пишу полную хранимую процедуру), в то время как мой course_id в БД имеет тип int, после приведения он работает правильно, что может быть причиной

@course int =null,
    SET @query = @query + 'Where course_id='+ cast(@course as varchar)

Ответы [ 3 ]

5 голосов
/ 10 ноября 2010

В выражении VARCHAR + INT, VARCHAR означает безбожие INT, а не наоборот.

Этот запрос:

SELECT  '12' + 345

вернет 357, а не '12345', а вот этот:

SELECT  'ab' + 1

не вернется, а вернется 'ab1'

Если вы хотите конкатенацию строк, вы должны использовать явное приведение, что вы и делаете.

2 голосов
/ 10 ноября 2010

потому что когда вы используете динамический SQL, тогда строка sql должна быть строковым типом данных, и вы не можете объединить int в строку без преобразования int.Вы должны получить int как строку, а затем добавить его к остальной части строки SQL-запроса

1 голос
/ 10 ноября 2010

В качестве альтернативы вы можете просто определить переменную как varchar.

Если эта переменная может быть нулевой, то у вас также будет проблема, потому что нулевое сцепление со строкой является нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...