2017-10-30 1 views
0

Ich habe eine gespeicherte Prozedur, die das verfügbare Guthaben basierend auf Ledger-Einträgen berechnet, wie unten gezeigt. Ich möchte einen zusätzlichen Parameter bearbeiten und hinzufügen; Die ursprüngliche SP führt nur diese Abfrage:Ändern einer gespeicherten Prozedur

SELECT SUM([amount value]) as [Bal available] 
FROM [xxxxxxxxxxxx $Ledger Entries] 
WHERE [Entry No_] ='number_here' 

Aber ich will, es zu erreichen:

SELECT SUM([amount value]) as [Bal available] 
FROM [xxxxxxxxxxxx $Ledger Entries] 
WHERE [Transaction Type] ='TYPE1' and [Entry No_] ='number_here'` 

Irgendwelche Vorschläge?

ALTER PROCEDURE [dbo].[loadbal] 
    (
    @Company_Name varchar(100), 
    @EntNo varchar(100) 
    ) 
AS 
BEGIN 
DECLARE @SQL VARCHAR(4000) 
DECLARE @TableName VARCHAR(4000) 

SET @TableName='['[email protected]_Name+' $Ledger Entries]' 

SELECT @SQL = ' SELECT SUM([amount value]) as [Bal available] 
       FROM '[email protected]+' WHERE [Entry No_] ='[email protected] 

EXEC (@SQL) 

END 
+0

Bit verwirrt, wie es erscheinen würden Sie Ihre eigene Frage beantwortet haben? – Leonidas199x

+1

Dieser Code scheint für SQL-Injection anfällig zu sein. Angenommen, eine bösartige Entität erstellt eine Situation, in der der Proc mit dem Firmennamen "Blah" aufgerufen wird; DROP TABLE [Benutzer]; - '' –

+0

Ich wollte es in einer gespeicherten Prozedur erreichen. Die Lösung unten funktioniert, ich habe 'TYPE1' anstatt '' TYPE1 '' verwendet –

Antwort

1

Ändern Sie einfach Ihre Select Statement wie folgt:

SELECT @SQL = ' SELECT SUM([amount value]) as [Bal available] FROM '[email protected]+' WHERE [Transaction Type] = ''TYPE1'' AND [Entry No_] ='[email protected] 

SQL Query wie so aussehen:

SELECT SUM([amount value]) as [Bal available] FROM [ $Ledger Entries] WHERE [Transaction Type] = 'TYPE1' AND [Entry No_] = <whatever u have passed here> 
Verwandte Themen