0
여러 데이터베이스에서 쿼리를 실행하려고합니다. 각 데이터베이스는 다른 고객이지만 모든 테이블에서 동일한 테이블을 쿼리하고 있습니다. 모든 데이터베이스 (약 100)를 반복하고 모든 결과를 테이블에 넣고 싶습니다. 몇 가지 방법을 시도했지만 꽤 작동하지 않는 것 같아서 구문 일 수도 있습니다.DB 간 쿼리
IF OBJECT_ID('KW.dbo.Result') IS NOT NULL DROP TABLE KW.dbo.Result;
SELECT name as DBName, ROW_NUMBER() OVER(PARTITION BY 1 ORDER BY name) AS RNo
INTO #DBName
FROM sys.databases
WHERE name LIKE 'Customer%'
ORDER BY name;
SELECT * FROM #DBName
DECLARE @sql varchar;
SET @sql = N'SELECT bh.ID,
b.LINE AS Line#,
c.State,
bh.ZIP,
REPLACE(p.Phone, '-', '') AS Phone,
cc.COMPANY_NAME,
b.Amount
INTO KW.dbo.Result
FROM dbo.Customer c
LEFT JOIN dbo.Change ch ON ch.CIDNo = c.CIDNo
LEFT JOIN dbo.Provider p ON p.PIDNo = ch.PIDNo
LEFT JOIN dbo.BossHead bh ON bh.CHIDNo = ch.CHIDNo
LEFT JOIN dbo.Bills b ON b.BIDNo = bh.BIDNo
LEFT JOIN dbo.PartnerTerms pt ON pt.BIdNO = b.BIdNo
LEFT JOIN dbo.CompanyCode cc ON cc.CompanyCode = pt.CompanyCode
WHERE REPLACE(p.Phone, '-', '') IN
(
SELECT *
FROM KW.dbo.PhoneNumbers
)
AND bh.CreateDate BETWEEN "09-01-2016" AND "10-01-2017"
AND pt.CompanyCode IS NOT NULL
ORDER BY 1';
DECLARE @DB varchar;
DECLARE @i int;
BEGIN TRANSACTION;
SET @i = 1;
WHILE @i <= (SELECT MAX(RNo) FROM #DBName)
BEGIN
SET @DB = (SELECT DBName FROM #DBName WHERE RNo = @i)
USE @DB;
EXECUTE sp_executesql @sql
SET @i = @i + 1
END
COMMIT TRANSACTION;
GO
오류 메시지 : 다음은 내 코드입니다. "메시지 102, 수준 15, 상태 1, 줄 55 근처의 구문이 잘못되었습니다 '@DB'"
도움을 주시면 감사하겠습니다.
게시물을 수정하고 오류 메시지를 제공하거나 문제가 무엇인지 설명하십시오. 나는 왜 사람들이 이것을 할 수 없는지 이해하지 못합니다. 코드를 보면 어디에도 삽입 된 것을 볼 수 없습니다. 그게 문제 야? –
코드를 실행할 때 어떤 결과가 발생합니까? – pabrams
이 특정 시도에 대해 "메시지 102, 수준 15, 상태 1, 줄 55 '@DB'근처의 구문이 잘못되었습니다." 그것을 포함하지 않아서 죄송합니다. – Kush