游标的替代品

Alternative to Cursor

我正在寻找一种将游标用于存储过程的替代方法。我不想像下面那样 selecting 每个数据库(LAL、SINC、SMSS),我想 select 来自单独 table 的字符串列表并将它们插入 @rates table,加入相应的db/table。有没有办法通过连接来做到这一点,或者我需要用 Dynamic SQL/Cursor?

来写这个

我正在寻找可能的解决方案并感谢所有建议。谢谢。

DECLARE @rates TABLE
(
    DB       CHAR(5),
    FUTASUTA CHAR(3),
    DSCRIPTN CHAR(31),
    FUSUTXRT DECIMAL(18,4)
)

-- LAL Rates
INSERT INTO @rates 
    SELECT 'LAL', FUTASUTA, DSCRIPTN, (CONVERT(DECIMAL(18,4),FUSUTXRT))/10000000 as FUSUTXRT 
    FROM [LAL].[dbo].[UPR40100]

-- SINC Rates
INSERT INTO @rates 
    SELECT 'SINC', FUTASUTA, DSCRIPTN, (CONVERT(DECIMAL(18,4),FUSUTXRT))/10000000 as FUSUTXRT  
    FROM [SINC].[dbo].[UPR40100]

-- SMSS Rates
INSERT INTO @rates 
    SELECT 'SMSS', FUTASUTA, DSCRIPTN, (CONVERT(DECIMAL(18,4),FUSUTXRT))/10000000 as FUSUTXRT  
    FROM [SMSS].[dbo].[UPR40100]

....etc

table with Distinct databases 是一个简单的 table with names/id's

编号 |姓名

1 |拉尔

2 | SINC

3 |短信

等...

以下方法适合您:

DECLARE @TABLE TABLE(DBNAME VARCHAR(50))
DECLARE @DYNAMICQUERY VARCHAR(MAX)

INSERT INTO @TABLE VALUES('LAL')
INSERT INTO @TABLE VALUES('SINC')
INSERT INTO @TABLE VALUES('SMSS')

SET @DYNAMICQUERY = 
(
SELECT 'INSERT INTO @rates SELECT '''+ DBNAME +''', FUTASUTA,DSCRIPTN, (CONVERT(DECIMAL(18,4),FUSUTXRT))/10000000 as FUSUTXRT FROM ['+ DBNAME + '].[dbo].[UPR40100];'
FROM @TABLE
FOR XML PATH('')
)

EXEC(@DYNAMICQUERY)