0

T-SQLDynamicSPに問題があります。最初のブロックは私の失敗の試みであり、2番目は私のターゲット(非動的ブロック)です。

CREATE PROCEDURE UDP1_TRY_EQQQ
(@FACTUTABLE nvarchar(100))
AS 
declare @sqlquery as nvarchar(100)
BEGIN
SET @sqlquery = 'DELETE FROM ' + @FACTUTABLE + ' WHERE ANEXO IN 
    (SELECT ANEXO FROM ' + @FACTUTABLE + ' A LEFT JOIN ALTAS_MOVILES B 
    ON A.ANEXO=B.TCNFOL WHERE B.TCNFOL IS NULL)'
EXEC sp_ExecuteSql @sqlquery
END


DELETE FROM FACTURACION_201210
WHERE ANEXO IN 
(
SELECT ANEXO
FROM FACTURACION_201210 A
LEFT JOIN ALTAS_MOVILES B
ON A.ANEXO=B.TCNFOL
WHERE B.TCNFOL IS NULL
)
4

1 に答える 1

1

@sqlquery変数には100文字しか許可していません。大きくしてください。

また、テーブル名を置き換える必要があるこれらの動的クエリでは、2つの追加の予防措置を講じたいと思います。

  1. QUOTENAME()を使用します。例えば:@sql = 'Select * FROM ' + QuoteName(@table);
  2. information_schemaでテーブル名を調べて、構文エラーが発生しないことを確認します。SELECT Table_Name FROM Information_schema.Tables WHERE Table_Name = @FACTUTABLE;

本当に凝ったものにしたい場合は、テーブルが正しいスキーマにあることを確認し、information_schema.columns内をチェックして、選択したテーブルに正しい列名があることを確認することもできますが、通常、これらの最初の2つのチェックだけが囲碁。

于 2012-11-27T22:51:51.983 に答える