Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tsql 必须声明标量变量-使用游标_Tsql_Variables_Cursor_Scalar - Fatal编程技术网

Tsql 必须声明标量变量-使用游标

Tsql 必须声明标量变量-使用游标,tsql,variables,cursor,scalar,Tsql,Variables,Cursor,Scalar,这听起来可能很傻。然而,我试图从两个表的比较中获取最后修改的日期值,但是我得到了必须声明标量变量@pa'的错误。我有更多的列,这就是我使用游标检查的原因 declare @pa varchar(50) declare audit_cur cursor for select distinct audit_field from #Iam where concat(',',@af,',') like concat('%,',audit_field,',%') OPEN

这听起来可能很傻。然而,我试图从两个表的比较中获取最后修改的日期值,但是我得到了必须声明标量变量@pa'的错误。我有更多的列,这就是我使用游标检查的原因

declare @pa varchar(50)

declare audit_cur cursor for
     select distinct audit_field
     from #Iam
     where concat(',',@af,',') like concat('%,',audit_field,',%')

OPEN audit_cur
FETCH NEXT FROM audit_cur into @pa

declare @cmd varchar(1000)

WHILE @@FETCH_STATUS = 0
BEGIN

    set @cmd=concat('SELECT a.A_n,i.audit_field,a.',@pa,' field_value,i.field_after
FROM #Iam_audit a
JOIN (Select  a.A_n,  a.field_after,audit_field
from #iam a(nolock)
inner join (Select a_n, max(Modified_Date) as maxdate
        from #iam a2(nolock)
        where a2.Audit_field=@pa
        group by a_n
        ) as aa  on aa.a_n = a.a_n  and aa.maxdate=a.modified_Date
        where a.Audit_Field=@pa ) i 
ON i.audit_field=''',@pa,''' AND i.A_n=a.A_n AND a.',@pa,'<>i.field_after')

print @cmd -- for debug

    exec(@cmd)

    FETCH NEXT FROM audit_cur into @pa
END

CLOSE audit_cur
DEALLOCATE audit_cur

您可能应该使用基于集合的查询,而不是游标和动态sql,但是为了快速而肮脏的修复,您需要将动态sql字符串中a.Audit_字段=@pa的这一部分更改为a.Audit_字段='+@pa+'动态sql不知道@pa变量,因为它在自己的范围内运行

此外,您的SQL提示您正在audit_字段中使用逗号分隔的值。 这是一件非常糟糕的事情——要了解更多信息,请阅读,在这里你会看到很多原因,为什么这个问题的答案绝对是肯定的


如果您想了解如何使用基于集合的查询而不是这种混乱,请发布一个新查询或编辑此查询,以将示例数据作为+,以及所需结果包含在内。

有效:我将研究此问题,并尝试自己做这件事。谢谢你的建议:很高兴能帮忙:-