0
ALTER PROCEDURE [dbo].[ViewSo]
@Dt1 as datetime,
@Dt2 as datetime,
@CusName as nvarchar,
@so_no as nvarchar
AS
BEGIN
SET NOCOUNT ON;
SELECT *
FROM
(SELECT
0 as stat,
m.id, f.id as fg_id, f.fg_des, m.so_no,
Replace(CONVERT(NVARCHAR, CAST(m.so_date AS DATE) , 106),' ','-') AS so_date,
Convert(NVARCHAR,CAST(m.so_date AS DATE),101) AS so_date1,
m.cus_name, m.so_cus_id, m.doc_no, m.sale_person, m.so_rem,
f.fg_des AS eXP1, f.fg_qty,
CONVERT(VARCHAR(10), CAST(f.req_date AS DATE), 101) AS req_date,
CASE
WHEN COALESCE (q.tot_req_qty, 0) < f.fg_qty
THEN 'Not Updated'
ELSE 'Updated'
END AS req_qty_stat,
'SO No :' + CONVERT(varchar(15), m.so_no) + '/SO Date :' + CONVERT(varchar(15), REPLACE(CONVERT(NVARCHAR, CAST(m.so_date AS DATE), 106), ' ', '-')) + '/Cus Name :' + CONVERT(varchar(15), m.cus_name) + '/Sales Prsn :' + CONVERT(varchar(15), m.sale_person) AS filter ,
f.fg_no,m.so_stat,
m.del_flag, m.st_stat, m.st_rem
FROM
so_mas AS m
INNER JOIN
so_fg AS f ON m.id = f.so_id
LEFT OUTER JOIN
(SELECT
fg_id, SUM(req_qty) AS tot_req_qty
FROM
fg_qty
WHERE
(del_flag = 0)
GROUP BY fg_id) AS q ON q.fg_id = f.id
WHERE
m.del_flag = 0) AS S
WHERE
CONVERT(datetime, s.so_date) BETWEEN @Dt1 AND @Dt2
AND S.cus_name LIKE
CASE WHEN @CusName = '' THEN S.cus_name
ELSE +'%' + @CusName + '%'
END
ORDER BY
s.so_date;
END
Dies ist meine gespeicherte Prozedur, die Anweisung für den Fall übergeben. Wenn als Abfrage ausgeführt wird, funktioniert es gut. Wenn ich als gespeicherte Ware verwende, führt das zu falschen Ergebnissen.Stored Procedure übergeben wie Anweisung in Fall
Bitte helfen Sie mir zu lösen.
Bitte versuchen Sie einen * minimal * Beispiel zu schaffen, was Sie zu tun versuchen. Ich habe im Moment keine Ahnung. Außerdem haben Sie Ihre Parameter mit ziemlicher Sicherheit falsch deklariert, es sei denn, Sie haben die Absicht, dass '@ CustNo' und' @ so_no' nur bis zu 1 Zeichen enthalten sollten. Bitte beachten Sie [Schlechte Angewohnheiten, um zu kicken: VARCHAR ohne (Länge) deklarieren] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without- length.aspx) –
Ihr Code ist sehr schwer zu lesen. Stellen Sie sicher, dass Sie es besser formatieren, damit wir klar lesen können und wissen, was falsch ist. Auch habe ich mehrere WHERE-Anweisungen bemerkt, die ich vorschlagen, dass Sie stattdessen HAVING verwenden. – Husein