我正在寻找一种将光标用于存储过程的替代方法。我不想像下面那样选择每个数据库(LAL,SINC,SMSS),而是想从一个单独的表中选择一个字符串列表并将它们插入到@rates表中,并与相应的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
包含Distinct数据库的表是一个名为/ id' s
的简单表id |名称
1 | LAL
2 | SINC
3 | SMSS
等...
答案 0 :(得分:2)
以下方法适合您:
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)