Sql 游标循环不工作。仅获取参数中的最后一个值?
我创建了存储过程,以便用户可以在单个参数中选择多个逗号分隔的值 在这里,我在循环这些值时遇到了一些问题。这是密码Sql 游标循环不工作。仅获取参数中的最后一个值?,sql,sql-server,sql-server-2005,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2005,Sql Server 2008,Tsql,我创建了存储过程,以便用户可以在单个参数中选择多个逗号分隔的值 在这里,我在循环这些值时遇到了一些问题。这是密码 Alter PROCEDURE [dbo].[Testing] @Databases varchar(4096) AS Begin SET NOCOUNT ON; Declare @cnt varchar(500) Declare @sql varchar(Max) = '' Declare @DB varchar(50) ;WITH M
Alter PROCEDURE [dbo].[Testing] @Databases varchar(4096)
AS Begin
SET NOCOUNT ON;
Declare @cnt varchar(500)
Declare @sql varchar(Max) = ''
Declare @DB varchar(50)
;WITH MyCTE
AS (SELECT * FROM [dbo].[fnSplitStringList] (@Databases))
select * into #temp from MyCTE
DECLARE tenant_cursor CURSOR FOR
select * from #temp
OPEN tenant_cursor;
FETCH NEXT FROM tenant_cursor INTO @cnt;
WHILE @@FETCH_STATUS = 0
BEGIN
select @DB = dbname from CountryLookup where dbName = @cnt
if @sql = ''
Begin
SET @sql = 'select C1, C2, C3
from ' + @DB + '.dbo.T1
inner join DB1.T2 on T1.C4 = T2.C4
'
End
Else
Begin
SET @sql = 'select C1, C2, C3
from ' + @DB + '.dbo.T1
inner join DB1.T2 on T1.C4 = T2.C4
'
End
FETCH NEXT FROM tenant_cursor INTO @cnt;
END
CLOSE tenant_cursor;
DEALLOCATE tenant_cursor;
Drop table #temp
exec (@sql)
END
现在,当我执行类似exec[dbo].[Testing]'美国、日本、法国'
它只是给我法国的唱片
有人能帮我找出哪里错了吗?好吧,我可以看到一些奇怪的逻辑,比如
if@sql='
;但是错误的原因很简单,就是您正在覆盖您的@sql
变量,因此当您执行它时,它只返回光标检索到的最后一个国家的值。我不推荐这种方法,但如果仔细看,您会发现您永远不会附加到@sql,而只是分配给它
将else子句更改为
SET@sql=@sql+…
现在,当我在ssrs报告中使用此过程时,它不会为我提供多个值的记录。找到了解决方案。只是想对你的方法做点改变。如果你不想有突破性的结果,那么就这么做吧。我按照你说的做了改变。但在报告中,此存储过程不起作用。我应该在进程中进行任何其他更改,以便将多个数据库的记录合并到一个结果中。谢谢