1

を使用して動的SQLを作成しようとしましsp_executesqlたが、次のエラーメッセージが表示されます。

メッセージ137、レベル15、状態2、行20
スカラー変数「@start」を宣言する必要があります。

これが私のストアドプロシージャスクリプトです

CREATE PROCEDURE sp_test (@start datetime, @end datetime)
AS
BEGIN
   DECLARE @sql nvarchar(MAX)

   SET @sql = 'SELECT * FROM table1 WHERE '
   SET @sql = @sql + N'startDate BETWEEN @start AND @end'

   EXEC sp_executesql @sql

任意の入力をいただければ幸いです。

4

1 に答える 1

1

以下のT-SQLで問題を解決できます。ただし、システムストアドプロシージャはこの命名規則を使用するため、ストアドプロシージャ名の前に「sp_」を付けることはお勧めしません。ストアドプロシージャをシステムストアドプロシージャと混同したくない場合は、さらに悪いことに、Microsoftは将来のシステムストアドプロシージャの1つに自分の名前を付けることにします。

注意事項:

  • @ParameterDefinition変数で、動的SQLステートメントに渡すすべてのカスタムパラメーターを定義/宣言します。
  • 各カスタム変数を、すでにプロシージャの一部であるかのようにsp_executesql呼び出しに追加します。

    IF OBJECT_ID('sp_test', 'P') IS NOT NULL DROP PROCEDURE sp_test
    GO
    -- ============================================================================
    -- CALLING EXAMPLE:
    -- EXEC sp_test '01/01/1901', '01/02/1901'
    -- ============================================================================
    CREATE PROCEDURE sp_test (@start datetime, @end datetime)
    AS
    BEGIN
    
    DECLARE @sql nvarchar(max)
    
    SET @sql = 'SELECT * FROM table1 WHERE '
    SET @sql = @sql + N'startDate BETWEEN @start AND @end'
    
    -- Build the Parameter Definition list for the dynamic SQL statement below  
    DECLARE @ParameterDefinition nvarchar(1000);
    SELECT @ParameterDefinition = ''  
    + ' @start datetime'  
    + ',@end datetime' 
    
    EXEC sp_executesql  
        @statement  = @sql  
       ,@params     = @ParameterDefinition  
       -- Assign values to any of custom parameters defined in @ParameterDefinition:  
       ,@start      = @start  
       ,@end        = @end  
    
    END
    GO
    
于 2013-03-14T05:40:07.770 に答える