2017-10-30 7 views
0

以下に示すように、元帳エントリに基づいて利用可能な残高を計算するストアドプロシージャがあります。追加のパラメータを編集して追加したいと思います。オリジナルのSPは、このクエリを実行:ストアドプロシージャの変更

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

をしかし、私はそれを達成したい:

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

任意の提案ですか?

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

少し混乱? – Leonidas199x

+1

このコードはSQLインジェクションの影響を受けやすいようです。悪意のあるエンティティが、「blah」の会社名でprocが呼び出される状況をエンジニアリングするとします。 DROP TABLE [ユーザー]; - '' –

+0

私はストアドプロシージャでそれを達成したかったのです。下の解決策は、私は 'TYPE1'ではなく 'TYPE1'を使用していました –

答えて

1

ただ、次のようにあなたのSelectステートメントを変更します。

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

SQL Queryをなどのようになります。あなたがあなた自身の質問に答えていると思われるよう

SELECT SUM([amount value]) as [Bal available] FROM [ $Ledger Entries] WHERE [Transaction Type] = 'TYPE1' AND [Entry No_] = <whatever u have passed here> 
関連する問題