بيان حالة في SQL ROW_NUMBER () جملة ORDER BY لا تعمل على القيم VARCHAR و Int
-
06-07-2019 - |
سؤال
لماذا لا هذا العمل؟
DECLARE @temp table
(ShipNo int,
Supplier varchar(10)
)
INSERT INTO @temp VALUES (1,'CFA')
INSERT INTO @temp VALUES (1, 'TFA')
INSERT INTO @temp VALUES (2, 'LRA')
INSERT INTO @temp VALUES (2, 'LRB')
INSERT INTO @temp VALUES (3, 'ABC')
INSERT INTO @temp VALUES (4, 'TFA')
Declare @OrderBy varchar(255)
sET @OrderBy = 'Supplier'
SELECT ROW_NUMBER() OVER (ORDER BY
CASE @OrderBy
WHEN 'Supplier' THEN Supplier
WHEN 'ShipNo' THEN ShipNo
END
) AS RowNo,
ShipNo,
Supplier
FROM @temp
ولكن إذا كنت يلقي ShipNo إلى VARCHAR في بيان الحالة يعمل؟
المحلول
وأنا أدرك أن هذا هو آخر العمر ولكن هذا هو عن أي واحد الذي يهوي على هذه القضية وتبحث عن حل:
SELECT ROW_NUMBER() OVER (ORDER BY
CASE @OrderBy
WHEN 'Supplier' THEN Supplier
END
CASE @OrderBy
WHEN 'ShipNo' THEN ShipNo
END
)
وأساسا انك تضع كل حقل في قضيته الخاصة. هل هذا فقط عندما نوع البيانات الخاصة بهم أو قيمة داخل الحقل يختلف عن كل من الأعمدة أو عندما كنت تحصل على خطأ مثل
فشلوتحويل عند محاولة تحويل الباحث إلى VARCHAR أو varchar إلى كثافة العمليات ..
نصائح أخرى
ومن المباشرة:
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
]
END
و"أنواع البيانات من else_result_expression وأي result_expression يجب أن تكون هي نفسها أو يجب أن يكون التحويل الضمني."
ويجب أن يكون ذلك مورد وShipNo نفس نوع البيانات.
لا تنتمي إلى StackOverflow