Ich möchte eine SQL Server gespeicherte Prozedur schreiben, aus dieser Abfrage abrufen geschwenkt ErgebnisStored Procedure Fehler Umwandlung SQL Server
ALTER procedure [dbo].[sp_get_list_penerimaan_pks]
(@tahun int,
@bulan int,
@pks int)
as
begin
SET NOCOUNT ON;
declare @cols AS NVARCHAR(MAX);
declare @query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.asal)
FROM (
SELECT
cpo.tanggal,
dg.asal,
(((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))))))-(((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0)))))) * 0.02))
as harga_beli_tbs_bersih
FROM
cpopko cpo
LEFT JOIN DAILY_GUU AS dg ON CONVERT (datetime, dg.tglolah, 103) = cpo.tanggal
LEFT JOIN PNL_TR_HARGA_KOMODITI AS ko ON ko.tanggal = cpo.tanggal
WHERE
YEAR (cpo.tanggal) >= @tahun and [email protected] and month(cpo.tanggal)[email protected]
) c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT tanggal, ' + @cols + ' from
(
SELECT
cpo.tanggal,
dg.asal,
(((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))))))-(((((cpo - ongkos_ms)* CAST(NULLIF(dg.minyak_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))) +((pko - ongkos_is)* CAST(NULLIF(dg.inti_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0))))-(447.6 * ((CAST(NULLIF(dg.minyak_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0)))+(CAST(NULLIF(dg.inti_efektif,0) as float)/(NULLIF(dg.tbs_diolah, 0)))))) * 0.02))
as harga_beli_tbs_bersih
FROM
cpopko cpo
LEFT JOIN DAILY_GUU AS dg ON CONVERT (datetime, dg.tglolah, 103) = cpo.tanggal
LEFT JOIN PNL_TR_HARGA_KOMODITI AS ko ON ko.tanggal = cpo.tanggal
WHERE
YEAR (cpo.tanggal) >= '[email protected] +' and [email protected] and month(cpo.tanggal)[email protected]
) x
pivot
(
max(harga_beli_tbs_bersih)
for asal in (' + @cols + ')
) p '
execute(@query)
end
aber ich diesen Fehler Ergebnis bekam:
Prozedur Ausführung fehlgeschlagen 22018 - [SQL Server] Konvertierung fehlgeschlagen, wenn der nvarchar-Wert 'SELECT tangal, [54], [11], [56], [53], [40], [21], [12] von ( ) SELECT cpo. Tanggal, dg.asal, (((((cpo - ongkos_ms)) * CAST (NULLIF (dg.minyak_efektif, 0) als Gleitkommazahl)/(NULLIF (dg.tbs_diolah, 0))) + ((pko - ongkos_is) * CAST (NULLIF (dg. inti_efektif, 0) als float)/(NULLIF (dg.tbs_diolah, 0)))) - (447.6 * ((NULLIF (dg.minyak_efektif, 0) als Gleitkommazahl)/(NULLIF (dg.tbs_diolah, 0))) + (CAST (NULLIF (dg.inti_efektif, 0) als Gleitkommazahl)/(NULLIF (dg.tbs_diolah, 0)))))) - (((((cpo - ongkos_ms) * CAST (NULLIF (dg.minyak_efektif, 0) als Gleitkomma)/(NULLIF (dg.tbs_diolah, 0))) + ((pko - ongkos_is) * CAST (NULLIF (dg.inti_efektif, 0) als Gleitkomma)/(NULLIF (dg.tbs_diolah, 0)))) - (447.6 * ((NULLIF (dg.minyak_efektif, 0) als float)/(NULLIF (dg.tbs_diolah, 0))) + (CAST (NULLIF (dg.inti_efektif, 0) als float)/(NULLIF (dg.tbs_diolah, 0)))))) * 0,02)) als harga_beli_tbs_bersih FROM cpopko CPO LEFT JOIN DAILY_GUU AS dg ON CONVERT (DATETIME dg.tglolah, 103) = cpo.tangg al LINKE VERBINDUNG PNL_TR_HARGA_KOMODITI AS ko EIN ko.tanggal = cpo.tanggal WHERE YEAR (cpo.tanggal)> = 'zum Datentyp int.
Ich bin total verwirrt über diesen Fehler. Ich recherchiere bereits bei Google, kann aber die Probleme nicht beheben. Hoffe ihr könnt mir helfen - danke im Voraus.
i werfen bereits alle params in ‚@query‘ string zu varchar, aber kein Ergebnis herauskommen. Muss ich die Params auch in '@cols' umwandeln? Was ist der Unterschied zwischen Ausführen und Sp_executesql thnks be4 sir – Jsnow
@Jsnow - Übergeben Sie die Parameterwerte an statische Abfrage und überprüfen, ob es Datensätze zurückgibt. Mit 'SP_EXECUTESQL' können Sie Werte an Variablen innerhalb einer dynamischen Abfrage übergeben, wodurch SQL Injection vermieden wird. Sie können das Ergebnis auch aus dynamischer Abfrage in Variable erhalten. Überprüfen Sie hier für weitere Informationen https://msdn.microsoft.com/en-us/library/ms188001.aspx –
diese schwenkbare Tabelle hat dynamische Spalte basierend auf Wert in der vorherigen Tabelle. Von dem, was ich lerne, etwas zurückzugeben, können wir Funktion verwenden, aber um Tabellenwert zurückzugeben, müssen wir die temporäre Tabelle zusammen mit ihrer Spalte vordefinieren. Wie können wir eine temporäre Tabelle in Funktion erstellen, deren Spalte basierend auf Abfrageergebnis dynamisch ist. Danke im Voraus, Sir. – Jsnow