通过使用动态SQL,我创建了这样的变量名:
set @tempresultStore = 'Temp'+@colVar
现在,它@tempresultstore
具有值'TempMiddleName',然后我声明了名为TempMiddleName的变量,并在动态sql查询的同一行中分配了该值并执行了该值。
代码如下:(向下滚动到带注释的代码行以跟踪问题所在)
CREATE Procedure OutputProcedure
@LastNameFromUser nvarchar(20) = null,
@LastNameFromTable nvarchar(20),
@MiddleNameFromUser nvarchar(20) = null,
@MiddleNameFromTable nvarchar(20) = null,
@CityFromUser nvarchar(20) = null,
@CityFromTable nvarchar(20) = null,
@Percentage int out
AS
BEGIN
SELECT @MiddleNameFromTable AS'middlename'
select @LastNameFromTable as 'LASTNAMEFROMTABLE'
select @LastNameFromUser as 'LASTNAMEFROMUser'
select 'OUTPUTPROCEDURECALLED'
declare @maxvalue int , @finalpercentage int = 0
DECLARE @variableTable TABLE
(
idx int identity(1,1),
matchvalue nvarchar(15)
)
INSERT INTO @variableTable(matchvalue) values ('MiddleName')
INSERT INTO @variableTable(matchvalue) values ('LastName')
INSERT INTO @variableTable(matchvalue) values ('City')
SELECT * FROM @variableTable
DECLARE @counter int
declare @sql nvarchar(100)
declare @sql2 nvarchar(25), @finalResult nvarchar(100)
set @finalResult = 0;
declare @sql3 nvarchar(300), @sql4 nvarchar(15), @tempresultStore nvarchar(20), @temp int, @temp2 int, @average int
DECLARE @ParmeterDefinition nvarchar(500);
set @ParmeterDefinition =
N'@LastNameFromUsnvarchar(20),
@LastNameFromTab nvarchar(20),
@MiddleNameFromUs nvarchar(20),
@MiddleNameFromTab nvarchar(20),
@CityFromUs nvarchar(20),
@CityFromTab nvarchar(20),
@Percent int out'
SET @counter = 1
SELECT @maxvalue = (SELECT MAX(idx) FROM @variableTable)
select @maxvalue as 'MAXVALUE'
WHILE(@counter < @maxvalue)
BEGIN
DECLARE @colVar nvarchar(15)
SELECT @colVar = matchvalue FROM @variableTable WHERE idx = @counter
set @tempresultStore = 'Temp'+@colVar --here
SELECT @tempresultStore AS 'FINALCUTPART'
select 'JUSTBEFORSQL'
set @sql3 = 'declare @Temp' + @colVar + ' int = dbo.[Match' + @colVar + '](' + @colVar + 'FromUser,' + @colVar + 'FromTable, 0)'
select @sql3 as 'check sql query formed'
EXEC sp_executesql @sql3,
@ParmeterDefinition,
@LastNameFromUs = @LastNameFromUser,
@LastNameFromTab = @LastNameFromTable,
@MiddleNameFromUs = @MiddleNameFromUser,
@MiddleNameFromTab = @MiddleNameFromTable,
@CityFromUs = @CityFromUser,
@CityFromTab = @CityFromTable,
@Percent = @Percentage out
select @Percentage AS 'PERCENTRETRIVED'
set @finalResult = @finalResult + @Percentage /*here @Percentage always remains 0. It is the value returned by the UDF called by the dynamic SQL above.The function does return the value but probably I fail to store it correctly.*/
select @finalResult as 'SUM'
SET @counter = @counter + 1
select @counter as 'COUNTERVALUE'
END
set @finalpercentage = @finalResult/@maxvalue
SELECT @finalpercentage AS 'FINALRESULT'
RETURN
END
Go
我如何访问存储在名为int的变量中的int值 @TempMIddleName
它应该与output关键字一起使用。无需创建表。我不知道,但是您的代码不正确。您具有输出参数@Percent并将功能值分配给@TempMiddleName,那么您应该没有@Percent作为输出,而应具有@TempMiddleName。
您将获得动态SQL
declare @TempMiddleName int = dbo.[MatchMiddleName](MiddleNameFromUser,MiddleNameFromTable, 0)
我曾经回答过您,您想念@
您的变量之前。另外,您还为动态查询提供了变量@Percent(以及其他变量),但没有为其分配任何值。尝试改变
SET @sql3 = 'declare @Temp' + @colVar + ' int = dbo.[Match' + @colVar + '](' + @colVar + 'FromUser,' + @colVar + 'FromTable, 0)'
到
SET @sql3 = 'select @Percent = 1'
并且您会看到按预期方式返回了1。
您在这里也有错误。从类型中拆分第一个参数
set @ParmeterDefinition =
N'@LastNameFromUsnvarchar(20),
set @ParmeterDefinition =
N'@LastNameFromUs nvarchar(20),
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句