0

テーブル名:
RM_master

フィールド:
cust_no
acct_no
acct_code

質問は、テーブル RM_master をストアド プロシージャのパラメータの変数として作成したいですか?

これには構文エラーはありませんが、クエリ アナライザーでストアド プロシージャ名を右クリックしてこれを実行すると、変数テーブル名 (RM_master) が識別されません

CREATE PROCEDURE RMQUERY

  @cusnumber  nvarchar (255) = '' ,
  @acctnumber nvarchar (255) = '' ,
  @master nvarchar (255) = ''

AS

BEGIN

SET @CUSNUMBER = @CUSNUMBER
DECLARE @RMRM AS NVARCHAR (255)
SET @RMRM =n'SELECT * FROM' + @MASTER + 'WHERE ACCT_NO =' + @ACCTNUMBER

EXEC RMQUERY2 
END
4

4 に答える 4

1

ストアド プロシージャ内に動的 SQL を作成するだけなので、お勧めしません。入力によってどのような SQL が作成されるかについての概要がわからないため、これにより SQL インジェクションのバックドアが開かれます。パラメータ値は、クエリ要素自体として使用してはならず、クエリ内の値としてのみ使用してください (動的に作成できますが、常にパラメータを使用する必要があります)。 )。

ただし、必要に応じて、外部ストアド プロシージャ sp_executesql を使用し、SQL をそのプロシージャにフィードする必要があります。

于 2009-03-16T13:56:53.710 に答える
0

動的SQLクエリでは「FROM」と「WHERE」の間にスペースが必要です

それ以外の

SET @RMRM =n'SELECT * FROM' + @MASTER + 'WHERE ACCT_NO =' + @ACCTNUMBER

やったほうがいい

SET @RMRM = N'SELECT * FROM ' + @MASTER + N' WHERE ACCT_NO =' + @ACCTNUMBER
于 2009-03-16T14:49:28.547 に答える
0

@master に値を割り当てていません。

于 2009-03-16T13:57:40.947 に答える
0

テーブル名の前後にスペースを追加すると、次のようになります。

SELECT * FROMTABLENAMEWHERE ACCT_NO =0
于 2009-03-16T14:15:00.563 に答える