对具有类似名称的所有数据库运行查询

时间:2018-06-18 15:33:42

标签: sql sql-server sql-server-2014

我在服务器上有30个数据库。我需要针对其中的20个运行查询。我写了一些代码来处理这个问题,但它正在轰炸,所以我正在寻找关于如何纠正这个或改变我的方式的建议。

错误信息:

  

Msg 102,Level 15,State 1,Line 16
  'hr'附近的语法不正确。

我需要针对所有数据库运行的数据库都有类似的名称:

CustDB00001
CustDB00025
CustDB00076
CustDB09999

我的代码:

set nocount on;

DECLARE @db_name NVARCHAR (150)

DECLARE c_db_names CURSOR FOR
    SELECT name 
    FROM sys.databases
    WHERE name like ('Billing%')

OPEN c_db_names    

FETCH c_db_names INTO @db_name    

WHILE @@Fetch_Status = 0    
BEGIN
    EXEC('INSERT INTO #B1report   
              SELECT 
                  hr.client,
                  RTRIM(LTRIM(hc.facility)) AS facility,
                  h.gcode, h.rcode,
                  u.bill,
                  hr.*
              FROM 
                  CustDB' + dbname + '.dbo.table1 h 
              JOIN 
                  CustDB' + dbname + '.dbo.table2 hr ON hr.[hrcounter] = h.hcounter 
              JOIN 
                  CustDB' + dbname + '.dbo.table3 hc ON hc.[hccounter] = hr.hrcounter 
              JOIN 
                  CustDB' + dbname + '.dbo.table4 u ON u.ucounter = hc.hccounter 
              WHERE 1 = 1 
                AND CAST(2.r_date AS DATE) BETWEEN ''01/01/2017'' AND ''6/18/2018''
                AND 1.rcode IN (''69'', ''70'')')

    FETCH c_db_names INTO @db_name
END

CLOSE c_db_names
DEALLOCATE c_db_names

SELECT * FROM #B1report

有关如何纠正上述内容或如何更好地处理(可能没有光标)的任何建议,将不胜感激。

1 个答案:

答案 0 :(得分:0)

我使用上述所有建议解决了这个问题。我现在坚定地陷入一个全新的错误。我不知道从哪里开始详细说明我的答案,但我将在接下来的几分钟内尝试