繁体   English   中英

如何使用游标从具有相同表结构的不同数据库的Select语句中获取结果集

[英]How to get the result set from the Select statement from different databases having same table structure using cursor

下面是一段代码,需要从不同数据库的同一条select语句中获取结果。 我已经使用光标从MASTER.dbo.sysdatabases中选择数据库列表,并将其传递给变量(即@name),该变量将一个接一个地保存数据库名称。

在选择语句下,我已经传递了类似@ name.dbo.currencyconversionrates

但是,在运行代码时,我没有得到结果。 错误信息:-

消息102,级别15,状态1,第23行在“。”附近的语法不正确。

我的代码:

DECLARE @name nVARCHAR(100)
DECLARE @DBV nVARCHAR(100)


DECLARE @db_cursor CURSOR 
SET @db_cursor = CURSOR FAST_FORWARD
FOR 

SELECT name 
FROM MASTER.dbo.sysdatabases 
WHERE name  IN ('ENT_Benteler','ENT_DEUTSCHE_BANK','ELV_Henry_Schein','ENT_HONDA') 

OPEN @db_cursor   

FETCH NEXT FROM @db_cursor INTO @name   

WHILE @@FETCH_STATUS = 0   
BEGIN 
set @DBV= @name
FETCH NEXT FROM @db_cursor INTO @name 
--print @DBV
   --use  @name
   select row_id, base_currency,conversion_currency, effective_period_start, effective_period_end, rate, effective_period_start as 'Use this for Script' from @name.dbo.currencyconversionrates 
   order by CONVERSION_CURRENCY,EFFECTIVE_PERIOD_START

END
CLOSE @db_cursor   
DEALLOCATE @db_cursor

请帮助我纠正问题。

select row_id, base_currency,conversion_currency, effective_period_start, effective_period_end, rate, effective_period_start as 'Use this for Script' 
from @name.dbo.currencyconversionrates 
order by CONVERSION_CURRENCY,EFFECTIVE_PERIOD_START

上面的部分不正确,因为不支持from之后的参数。 您应该利用dynamic SQL ,忽略SQL injection ,您可以这样做:

DECLARE @SQL VARCHAR(MAX)
SET @SQL = '
        select row_id, base_currency,conversion_currency, effective_period_start, effective_period_end, rate, effective_period_start as [Use this for Script] 
        from ['+ @name +'].dbo.currencyconversionrates 
        order by CONVERSION_CURRENCY,EFFECTIVE_PERIOD_START'
print (@SQL)
--EXEC (@SQL)

EXEC发表评论之前先尝试print

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM