私たちには10-12歳の古いプロジェクトがあります。それはSQL2008に移行したSQL2000を使用していました。ストアドプロシージャの動的作成SQLは、ストアドプロシージャの目的を否定しますか?
この作業では、ストアドプロシージャがパラメータを受け入れていて、クエリを文字列として構築してから、EXECを使用してコマンドを実行していることがわかりました。
CREATE PROCEDURE MyProc
(@TableName varchar(255),
@FirstName varchar(50),
@LastName varchar(50))
AS
-- Create a variable @SQLStatement
DECLARE @SQLStatement varchar(255)
-- Enter the dynamic SQL statement into the
-- variable @SQLStatement
SELECT @SQLStatement = "SELECT * FROM " +
@TableName + "WHERE FirstName = '"
+ @FirstName + "' AND LastName = '"
+ @LastName + "'"
-- Execute the SQL statement
EXEC(@SQLStatement)
これは悪いアプローチですか。これにより、ストアドプロシージャ(プリコンパイルされたクエリの利点)の利点が失われますか?
このようにしてselectを行うのは、唯一の目的であれば、悪い考えですが、パフォーマンス上の理由からではなくデザインが悪いからです。 – JNK
+1質問には、これは単なる例であり、一般的な質問であると理解しています。これはストアドプロシージャの利点を殺しますか?より複雑なsprocで言えましょう。 –
はい、SPは単なる例ですが、私が心配しているものは本当に大きくて醜いです...彼らは次のようなパターンを持っています。つまり、中間のSELECT文を作成し、ページ区切りなど... –