オプションパラメータのデフォルト値を明示的に指定された場合伝える方法があります。速く汚れた方法は、コマンドをリテラルとしてSQLに渡し、ラッパー・プロシージャーを使用してパラメーターをテストすることです。ラッパー・プロシージャーのデフォルト値をハードコードする必要があるので、変更された場合は、もちろんラッパーも変更する必要があることに注意してください。
以下は、入力SQLコマンドを非常に簡単に処理する方法の例です。このラッパーから、メイン・プロシージャーに何をすべきかを通知するフラグを戻すことができます。
CREATE PROCEDURE TestWapper
(@RESULT INT OUTPUT)
AS
SET NOCOUNT ON;
DECLARE
@SQL AS NVARCHAR(200),
@NumberCommas AS INT,
@LOC1 AS INT,
@LOC2 AS INT,
@Param1Literal AS VARCHAR(50),
@Param2Literal AS VARCHAR(50)
--Set the SQL Command
SET @SQL = N'EXEC SetColumnNull 5, NULL';
--How many commas can tell us how many parameters MIGHT have been used
SET @NumberCommas = LEN(@SQL)-LEN(REPLACE(@SQL,',',''));
--Iterate through and see what the parameters are
IF @NumberCommas = 0
BEGIN
PRINT 'no optional parameter was specified'
SET @RESULT = 0
RETURN
END
IF @NumberCommas = 1 --the 1st optional parameter might have been specified
BEGIN
--let's get the location of the comma first
SET @LOC1 = CHARINDEX(',',@SQL);
SET @Param1Literal = LTRIM(SUBSTRING(@SQL,@LOC1+1,LEN(@SQL)))
IF @Param1Literal = 'NULL'
BEGIN
PRINT 'parameter1 : ' + @Param1Literal + ' was used'
SET @RESULT = 1;
END
ELSE
SET @RESULT = 0;
RETURN
END;
--IF @NumberCommas = 2 -- do similar things
END
あなたはコマンドテキストへのアクセス権を持っていない場合、私は指定されたパラメータ値としてNULLにデフォルトパラメータ値としてNULLを比較する方法が表示されません。
あなたの質問は何ですか:それは決定または更新ですか? – TheGameiswar
可能ならば、更新するだけでyesと判断する必要はありません。 – metehanm
COALESCEは最初のNULL以外の値を返し、すべてがNULLの場合はNULLを返します。つまり、指定されたコードでは、テスト列がすでにNULLでない限り、@testのnullのデフォルトは無視されます。特定の列をNULLに更新する場合は、最初にCOALESCEの使用を検討することをお勧めします。 – Kentaro