保存中にSQL文をつづり合わせる
多くの場合、私たちはパラメータを利用して記憶過程でSQL文を再組織しなければなりません。記憶過程で綴り合わせたSQL文はただの文字列です。直接実行されないので、executeを追加して実行すればいいです。具体的には下記のデモコードをご覧ください。
コード:
コード:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
-- =============================================
-- Author: yy
-- Create date: 2012-1-17
-- Description: SQL
-- =============================================
CREATE PROCEDURE [dbo].[Test]
@FileName varchar(10), --
@Operator varchar(1), --
@FileValue varchar(10) --
AS
DECLARE @TempSql varchar(100) -- sql
BEGIN
set @TempSql= 'select * from Comment where ' + @FileName + @Operator + char(39) + @FileValue + char(39) -- sql ,char(39)
execute(@TempSql) -- sql
END
テスト:execute Test 'newsid','>',4
この説明では、「ALTERPROCEDURE[dbo].[Test]」から「AS」から「BEGIN」までのコードの違いは何ですか?私のようなSQL初心者は疑問があるはずです。どうして@TempSqlは「AS」から「BEGIN」までの間に定義されていますか?「AS」から「BEGIN」までは臨時変数として定義されていますので、前にDECLAREを追加しなければなりません。他の言語では普通変数の使用方法と同じです。一方、「ALTER PROCEDURE[dbo].[Test]から「AS」までの間で定義されているのは、格納プロセスが呼び出された時に入ってくる必要なパラメータであり、呼び出し時に値を付けなければならず、DECLAREを加えてはいけないということで、文字の定数として認識されています。呼び出し時に値が付けられたら、それ以上の例では@FileName='xxx'のような表記が間違っています。@TempSqlはSQL文を受け取るための一時変数で、初期値はないが、値を受け入れる必要があるので、「AS」から「BEGIN」までの間に定義します。