Я пытаюсь вставить значение с плавающей точкой из одной таблицы в другую, но я получаю сообщение об ошибке в теме этого поста:хранимых процедур - Ошибка преобразования типа данных VARCHAR плавать
Ошибка преобразования типа данных VARCHAR в плавать.
Оба поля в обеих таблицах имеют значение float. Значения представляют собой широты и долготы для почтовых индексов. Пример широты/долготы будет:
45,895698 -72,365896
Вот несколько фрагментов моего кода:
declare @v_latitude float
declare @v_longitude float
-- Grab Latitude & Longitude --
if @v_zip_code IS NOT NULL
SELECT @v_latitude=z_latitude, @v_longitude=z_longitude FROM tbl_ZipCodes WHERE z_zip_code = @v_zip_code
set @strValues = @strValues + '''' + @v_city + ''', ''' + @v_state + ''', ''' + @v_zip_code + ''', ''' + @v_daytime_phone + ''', ''' + @v_contact_name + ''', '''
+ @v_email_address + ''', ' + cast(@u_id as varchar) + ', ' + cast(@d_id as varchar) + ', 1, ''' + cast(CURRENT_TIMESTAMP as varchar) + ''', 1 , ''' + cast(@v_latitude as float) + ''', ''' + cast(@v_longitude as float) + ''', '''
+ cast(CURRENT_TIMESTAMP as varchar) + ''', dft.df_t_id, (SELECT CASE WHEN dft.df_t_v_price <> 0 THEN dft.df_t_v_price WHEN dft.df_t_v_internet_price <> 0 THEN dft.df_t_v_internet_price WHEN dft.df_t_v_other_price <> 0 THEN dft.df_t_v_other_price ELSE 0 END AS v_search_price)'
Часть кода, который использует @v_latitude и @ v_longitude переменные здесь:
... , ''' + cast(@v_latitude as float) + ''', ''' + cast(@v_longitude as float) + ''', ...
Игнорируйте «...», как я показываю, есть дополнительный код, который окружает эти значения.
Любая помощь будет оценена!
Edit: Вот дополнительный код, я использую:
-- Check For User Profile --
SELECT @counter = COUNT(*) FROM tbl_Customers WHERE u_id = @u_id
if @counter > 0
SELECT @v_city=c_city, @v_state =c_state, @v_zip_code=c_zip_code,@v_daytime_phone =c_phone_number FROM tbl_Customers WHERE u_id = @u_id
else
SELECT @v_city=d_city, @v_state =d_state, @v_zip_code=d_zip_code,@v_daytime_phone =d_phone_number FROM tbl_Dealers WHERE d_id = @d_id
-- Grab Contact Information --
SELECT @v_contact_name = u_name, @v_email_address = u_email_address FROM tbl_Users WHERE u_id = @u_id
-- Grab Latitude & Longitude --
if @v_zip_code IS NOT NULL
SELECT @v_latitude=z_latitude, @v_longitude=z_longitude FROM tbl_ZipCodes WHERE z_zip_code = @v_zip_code
-- Add Additional Fields --
set @strFields = @strFields + 'v_city, v_state, v_zip_code, v_daytime_phone, v_contact_name, v_email_address, u_id, d_id, v_processed, v_processed_date, v_active, ,v_latitude, v_longitude, v_last_activity, v_dealerfeed, v_search_price'
set @strJoin = @strJoin + ' LEFT JOIN tbl_Vehicles v ON v.v_stock_number = dft.df_t_v_stock_number'
set @strValues = @strValues + '''' + @v_city + ''', ''' + @v_state + ''', ''' + @v_zip_code + ''', ''' + @v_daytime_phone + ''', ''' + @v_contact_name + ''', '''
+ @v_email_address + ''', ' + cast(@u_id as varchar) + ', ' + cast(@d_id as varchar) + ', 1, ''' + cast(CURRENT_TIMESTAMP as varchar) + ''', 1 , ''' + @v_latitude + ''', ''' + @v_longitude + ''', '''
+ cast(CURRENT_TIMESTAMP as varchar) + ''', dft.df_t_id, (SELECT CASE WHEN dft.df_t_v_price <> 0 THEN dft.df_t_v_price WHEN dft.df_t_v_internet_price <> 0 THEN dft.df_t_v_internet_price WHEN dft.df_t_v_other_price <> 0 THEN dft.df_t_v_other_price ELSE 0 END AS v_search_price)'
-- Insert Records Into Vehicle Table (but not twice!) --
set @strSQL = 'INSERT INTO tbl_Vehicles (' + @strFields + ') SELECT ' + @strValues + ' FROM tbl_DealerFeed_temp dft ' + @strJoin + ' WHERE dft.df_t_processed = 0 AND dft.df_d_id = ' + cast(@df_d_id as varchar)
set @strSQL = @strSQL + ' AND dft.df_t_v_stock_number NOT IN (SELECT v.v_stock_number FROM tbl_Vehicles v WHERE v.d_id = ' + cast(@d_id as varchar) + ')'
print @strSQL
EXEC (@strSQL)
Если это уже поплавок, и вы пытаетесь объединить его в строку, вам нужно Конвери float to (n) varchar – Jeremy
@Jeremy - Я не уверен, что понимаю, что вы говорите. Я понимаю, что он уже объявлен как плавающий. Когда я пытаюсь сделать следующее, я получаю ту же ошибку, что и изначально: '- '' '+ @v_latitude +' '', '' '+ @v_longitude +' ''' – Brandon
Думаю, вам нужно разместить больше код вокруг ошибки. Похоже, вы пытаетесь построить строку и пытаетесь объединить переменные типа float в строку, что недопустимо. –