在T-SQL中需要两级参考

用户名

通过使用动态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

乔基·纳库里(Giorgi Nakeuri)

它应该与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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫中的两级标题?

来自分类Dev

如何在SQL中按两级按列排序?

来自分类Dev

如何在Laravel 4中实现两级关系?

来自分类Dev

聚合列表中的Elasticsearch两级排序

来自分类Dev

如何从数组中实现两级过滤数据?

来自分类Dev

如何在 Python 中创建两级嵌套 JSON?

来自分类Dev

Spark两级聚合

来自分类Dev

两级飞溅TCL

来自分类Dev

在C#中以XML获取父级两级的节点值

来自分类Dev

sp_executesql参数中的T-SQL对象参考

来自分类Dev

熊猫的两级分组地块

来自分类Dev

在SCP上移两级

来自分类Dev

FactoryGirl +祖先,两级深

来自分类Dev

Haskell的两级类型层次结构

来自分类Dev

在SCP上移两级

来自分类Dev

两级异步等待呼叫

来自分类Dev

熊猫的两级分组地块

来自分类Dev

向下访问两级 JSON 变量

来自分类Dev

如何访问两级嵌套变量?

来自分类Dev

调用两级存储过程

来自分类Dev

从两级XML列表中提取值到SQL列

来自分类Dev

T-SQL中数字类型的优先级

来自分类Dev

React.js 2路绑定:valueLink中的两级深度路径

来自分类Dev

React.js 2路绑定:valueLink中的两级深层路径

来自分类Dev

在两级引导导航栏中,我无法使顶部保持固定

来自分类Dev

两级汇总结果显示数值(0)

来自分类Dev

如何使用ReactiveCocoa进行两级输入信号?

来自分类Dev

AngularJS:如何编写两级排序函数

来自分类Dev

传递功能两级深度不起作用