хранимые процедуры и использование функций tsql в вызовах параметров - PullRequest
2 голосов
/ 05 мая 2011

Среда SQL Server 2005 SP3

У меня есть сохраненный процесс, который принимает INT в качестве ввода.Я хочу CAST CHAR для INT во время вызова хранимой процедуры.кажется, я не могу этого сделать.Я получаю синтаксическую ошибку перед @foo.Я не вижу, может кто-нибудь помочь мне найти его, пожалуйста.

CREATE PROCEDURE testme
@test AS INT
AS
BEGIN
SELECT @TEST
END

    DECLARE @foo AS CHAR(6)
set @foo = '11test'
EXEC testMe @test = CAST(Substring(@foo,1,2) as int)

Ответы [ 2 ]

3 голосов
/ 05 мая 2011

прежде всего, вы не можете разыграть '11test' как целое число

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

DECLARE @foo AS CHAR(6)
set @foo = '2'


EXEC testMe @test =@foo

Если вы хотите проверить, может ли оно быть преобразовано в int, возьмите функцию IsInt отсюда: IsNumeric, IsInt, IsNumber и используйте ее для проверки перед выполнением вызова proc

EDIT

вот как вы можете это сделать

DECLARE @foo AS CHAR(6)
set @foo = '11test'
SET @foo = CAST(Substring(@foo,1,2) as int)

EXEC testMe @test = @foo

вы не можете передавать функции процессам, поэтому GETDATE () также не работает,либо используйте промежуточную переменную, либо приведите обратно к той же переменной

0 голосов
/ 05 мая 2011

Нельзя преобразовать поле char в int, если оно содержит нецифровые символы.

Я бы предложил создать функцию, которая перебирает символы и удаляет не числовые.

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