Saya memiliki fungsi berikut
ALTER FUNCTION [dbo].[ActualWeightDIMS]
(
-- Add the parameters for the function here
@ActualWeight int,
@Actual_Dims_Lenght int,
@Actual_Dims_Width int,
@Actual_Dims_Height int
)
RETURNS varchar(50)
AS
BEGIN
DECLARE @ActualWeightDIMS varchar(50);
--Actual Weight
IF (@ActualWeight is not null)
SET @ActualWeightDIMS = @ActualWeight;
--Actual DIMS
IF (@Actual_Dims_Lenght is not null) AND
(@Actual_Dims_Width is not null) AND (@Actual_Dims_Height is not null)
SET @ActualWeightDIMS= @Actual_Dims_Lenght + 'x' + @Actual_Dims_Width + 'x' + @Actual_Dims_Height;
RETURN(@ActualWeightDIMS);
END
tetapi ketika saya mencoba menggunakannya, saya mendapat pesan kesalahan berikut "Konversi gagal saat mengonversi nilai varchar 'x' ke tipe data int." ketika saya menggunakan pernyataan pilih berikut
select
BA_Adjustment_Detail.ID_Number [ID_Number],
BA_Adjustment_Detail.Submit_Date [Submit_Date],
BA_Category.Category [category],
BA_Type_Of_Request.Request [Type_Of_Request],
dbo.ActualWeightDIMS(BA_Adjustment_Detail.ActualWeight,BA_Adjustment_Detail.Actual_Dims_Lenght,BA_Adjustment_Detail.Actual_Dims_Width,BA_Adjustment_Detail.Actual_Dims_Height) [Actual Weight/DIMS],
BA_Adjustment_Detail.Notes [Notes],
BA_Adjustment_Detail.UPSCustomerNo [UPSNo],
BA_Adjustment_Detail.TrackingNo [AirbillNo],
BA_Adjustment_Detail.StoreNo [StoreNo],
BA_Adjustment_Detail.Download_Date [Download_Date],
BA_Adjustment_Detail.Shipment_Date[ShipmentDate],
BA_Adjustment_Detail.FranchiseNo [FranchiseNo],
BA_Adjustment_Detail.CustomerNo [CustomerNo],
BA_Adjustment_Detail.BillTo [BillTo],
BA_Adjustment_Detail.Adjustment_Amount_Requested [Adjustment_Amount_Requested]
from BA_Adjustment_Detail
inner join BA_Category
on BA_Category.ID = BA_Adjustment_Detail.CategoryID
inner join BA_Type_Of_Request
on BA_Type_Of_Request.ID = BA_Adjustment_Detail.TypeOfRequestID
Yang ingin saya lakukan adalah jika ActualWeight tidak null maka kembalikan ActualWeight untuk "Actual Weight / DIMS" atau gunakan Actual_Dims_Lenght, Width dan Height.
Jika DIMS maka saya ingin memformat output menjadi LenghtxWidhtxHeight (15x10x4). ActualWeight, Adcutal_Dims_Lenght, Width dan Height semuanya adalah nilai int (integer) tetapi output untuk "Actual Weight / DIMS" harus varchar (50).
Di mana saya salah?
terima kasih
edit: Pengguna hanya dapat memilih salah satu Berat atau DIMS pada halaman ASP.net dan jika DIMS dipilih pengguna maka mereka harus menyediakan Panjang, Lebar dan Tinggi. Jika tidak, itu akan memunculkan kesalahan pada halaman ASP.net. Haruskah saya mengkhawatirkannya di sisi sql?
Jika Anda menggunakan SQL Server 2012+, Anda dapat menggunakan fungsi CONCAT di mana kami tidak perlu melakukan konversi eksplisit apa pun
sumber
CONCAT()
berkinerja lebih cepat dariCAST()
. Sumber studi kinerja yang andal akan berguna.Ubah ini:
Untuk ini:
Ubah ini:
Untuk ini:
Anda perlu menggunakan CAST. Pelajari semua tentang CAST dan CONVERT di sini , karena tipe data itu penting!
sumber
sumber
Anda harus mentransmisikan bilangan bulat Anda sebagai string saat mencoba menggabungkannya menjadi varchar.
yaitu
Di SQL Server 2008, Anda dapat menggunakan
STR
fungsi:sumber
STR(1)
memberi saya 9 spasi diikuti oleh1
.CAST
sebenarnya bekerja lebih baik.Transmisikan bilangan bulat ke varchar terlebih dahulu!
sumber
Anda perlu melakukan CAST data numerik Anda ke string sebelum Anda melakukan penggabungan string, jadi misalnya gunakan
CAST(@Actual_Dims_Lenght AS VARCHAR)
bukan hanya@Actual_Dims_Lenght
, & c.sumber
Saya mencoba kueri di bawah ini, itu berfungsi untuk saya persis
sumber
Cobalah mentransmisikan int ke varchar, sebelum menambahkannya ke string:
sumber
Ada kemungkinan Anda akan mendapatkan Angka Ilmiah ketika Anda mengubah Integer ke Str ... cara yang lebih aman adalah
SET @ActualWeightDIMS = STR(@Actual_Dims_Width); OR Select STR(@Actual_Dims_Width) + str(@Actual_Dims_Width)
sumber