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
得到错误,而Debugging必须声明标量变量@nRuleId。我已经宣布了。但是错误总是存在。
答案 0 :(得分:0)
您必须重写执行部分:
SET @params = N'@FIPSName VARCHAR(5), @nRuleId int'
EXEC sp_executesql @strRuleQuery, @params, @FIPSName = @FIPSName, @nRuleId = @nRuleId
我不明白,为什么你通过@FIPSName
作为参数,它不会在你的批次中使用。
答案 1 :(得分:0)
代码似乎存在许多问题。
要返回一个值,您需要声明一个OUTPUT参数,并且代码中实际上没有使用变量@FIPSName,并且@strRuleQuery在此代码中是多余的。
以下是SProc内部的代码,应该更接近您的需求。
-- 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