2016-09-21 3 views
0
USE GDMDBNS_1720 
GO 

IF EXISTS(SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' 
     AND ROUTINE_SCHEMA = 'dbo' AND ROUTINE_NAME = 'usp_RmsExecuteValidationRule') 
BEGIN 
    DROP PROCEDURE dbo.usp_RmsExecuteValidationRule 
END 
GO 

Create PROCEDURE [dbo].[usp_RmsExecuteValidationRule] 
    @nRuleId INT, 
    @FIPSName VARCHAR(5) 
AS 
BEGIN 

    DECLARE @strRuleQuery VARCHAR(MAX) 
    DECLARE @sqlstat AS NVARCHAR(MAX) 
    DECLARE @params AS NVARCHAR(MAX) 
    SET @strRuleQuery = N'SELECT RULE_QUERY from GdmValidationRuleMaster where 
    RULE_ID = @nRuleId' 

    SET @sqlstat = @strRuleQuery 

    SET @params = N'@FIPSName VARCHAR(5)' 
    EXEC sp_executesql @params, 
     @query = @sqlstat, 
     @FIPSName = @FIPSName 

END 

Fehler erhalten, während das Debugging die Skalarvariable @nRuleId deklarieren muss. Ich habe es bereits erklärt. Aber der Fehler kippt immer aus.Muss Skalarvariable deklarieren @nRuleId

+0

Sie einen Wert '@ nRuleId' zugewiesen haben – Takarii

+0

' 'Sp_executesql will eine SQL-Anweisung als ersten Parameter params kommt an zweiter Stelle, Sie' @ strRuleQuery' Contans eine Variable '@ nRuleId'which nicht als Parmeter erklärt und nicht zugewiesen, aber Sie deklarieren einen Parameter '@ FIPSName', der zugewiesen, aber nicht benötigt wird –

+0

Haben Sie eine der angegebenen Antworten überprüft? – gofr1

Antwort

0

Sie müssen Ausführungsteil umschreiben:

SET @params = N'@FIPSName VARCHAR(5), @nRuleId int' 
EXEC sp_executesql @strRuleQuery, @params, @FIPSName = @FIPSName, @nRuleId = @nRuleId 

Ich verstehe nicht, warum Sie tun @FIPSName als Parameter übergeben, wird es nicht in Ihrem Ansatz verwendet.

0

Es scheint eine Reihe von Problemen mit dem Code zu geben.

Um einen Wert zurückzugeben, müssen Sie einen OUTPUT-Parameter deklarieren und die Variable @FIPSName wird nicht tatsächlich im Code verwendet, und @strRuleQuery ist in diesem Code überflüssig.

Hier ist der Code aus dem SProc, der näher an Ihren Bedürfnissen sein sollte.

-- Parameters 
DECLARE 
@nRuleId INT = 1, 
@FIPSName VARCHAR(5) = 'ITS' 

-- Local variables 
DECLARE @sqlstat AS NVARCHAR(MAX) 
DECLARE @params AS NVARCHAR(MAX) 
DECLARE @RULE_QUERY NVARCHAR(MAX) 

SET @sqlstat = N'SELECT @RULE_QUERY=RULE_QUERY from GdmValidationRuleMaster where RULE_ID = @nRuleId' 

SET @params = N'@nRuleId INT, @RULE_QUERY NVARCHAR(MAX) OUTPUT' 
EXEC sp_executesql 
    @sqlstat, 
    @params, 
    @nRuleId = @nRuleId, @RULE_QUERY= @RULE_QUERY OUTPUT 

-- Output 
SELECT @RULE_QUERY 
Verwandte Themen