2017-09-19 24 views
0

でテーブルを連結するクエリの下方法を選択し、動的クエリ

DECLARE @DBName AS Nvarchar(MAX) 
select TOP(1) @DBName=DBName from StreamLeaderMaster.dbo.TicketMasterDB ORDER BY id DESC 
DECLARE @SQL AS Nvarchar(MAX) 
SET @SQL= 
'Select TCH.ID,MasterDB.CreatedByUserID,MasterDB.CreatedByDBName, 
MasterDB.CreatedByDBName+''.dbo.tblSMSecurityUser'' as waheguru, 
(select ISNULL(strFirstName,'''') as firstname from 
dbo.tblSMSecurityUser where UserID=1) as waheguru2,MD.DBName, 
U.strFirstName,Message,CONVERT(VARCHAR(9),CONVERT(date, 
CH.CreatedDate),6) As CreatedDate,TCH.CreatedDate as CreatedDateTime, 
RepliedByUserID,RepliedMasterDBID from 
StreamLeaderMaster.dbo.TicketChatHistory TCH 
left join '[email protected] +'.dbo.tblSMSecurityUser U on 
U.UserID=TCH.RepliedByUserID 
left join StreamLeaderMaster.dbo.TicketMasterDB MD on 
MD.ID=TCH.RepliedMasterDBID 
LEFT JOIN StreamLeaderMaster.dbo.TicketMaster MasterDB on 
MasterDB.ID=TCH.TicketMasterID 
where TCH.TicketMasterID=1 and (TCH.IsDeleted <> 1 or TCH.IsDeleted IS 
NULL) order by CreatedDateTime desc' 
PRINT @SQL 
Exec(@SQL) 

を確認してくださいMasterDB.CreatedByDBNameは、私は、サブクエリ IEでdbo.tblSMSecurityUser前に添付したいDB名です

(select ISNULL(strFirstName,'''') as firstname from 

ユーザID = 1 dbo.tblSMSecurityUser)waheguru2

として210

は、私はそれは以下のようにそれを取得したい:によってどのような方法があります。.. waheguru2

としてユーザーID = 1)は、データベース名が動的に変更されているので

(select ISNULL(strFirstName,'''') as firstname from 

TESTDB.dbo.tblSMSecurityUserをIそれができます..

私を助けてください。

+0

に役立ちます。 – PacoDePaco

+0

カーソルはt-sqlの唯一のオプションではありません。 – sapi

答えて

0

これを試してみてください -

DECLARE @DBName AS Nvarchar(MAX) 
SELECT TOP(1) @DBName=DBName FROM StreamLeaderMaster.dbo.TicketMasterDB ORDER BY id DESC 
DECLARE @SQL AS Nvarchar(MAX) 
SET @SQL= 
'SELECT TCH.ID, MasterDB.CreatedByUserID, MasterDB.CreatedByDBName, 
MasterDB.CreatedByDBName.dbo.tblSMSecurityUser as waheguru, 
(select ISNULL(strFirstName,'''') as firstname from ' + @DBName + 
'dbo.tblSMSecurityUser where UserID=1) as waheguru2, MD.DBName, 
U.strFirstName,Message,CONVERT(VARCHAR(9),CONVERT(date, 
CH.CreatedDate),6) As CreatedDate,TCH.CreatedDate as CreatedDateTime, 
RepliedByUserID,RepliedMasterDBID from 
StreamLeaderMaster.dbo.TicketChatHistory TCH 
left join '[email protected] +'.dbo.tblSMSecurityUser U on 
U.UserID=TCH.RepliedByUserID 
left join StreamLeaderMaster.dbo.TicketMasterDB MD on 
MD.ID=TCH.RepliedMasterDBID 
LEFT JOIN StreamLeaderMaster.dbo.TicketMaster MasterDB on 
MasterDB.ID=TCH.TicketMasterID 
where TCH.TicketMasterID=1 and (TCH.IsDeleted <> 1 or TCH.IsDeleted IS 
NULL) order by CreatedDateTime desc' 
PRINT @SQL 
Exec(@SQL) 
0

私は私が正しくあなたの質問を理解して確認していません。

DECLARE @DBName AS Nvarchar(MAX) 
select TOP(1) @DBName=DBName from StreamLeaderMaster.dbo.TicketMasterDB 
ORDER BY id DESC 
DECLARE @SQL AS Nvarchar(MAX) 
SET @SQL= 
'Select TCH.ID,MasterDB.CreatedByUserID,MasterDB.CreatedByDBName, 
MasterDB.CreatedByDBName+''.dbo.tblSMSecurityUser'' as waheguru, 
(select ISNULL(strFirstName,'''') as firstname from 
' + @DBName + 'dbo.tblSMSecurityUser where UserID=1) as 
waheguru2,MD.DBName, 
U.strFirstName,Message,CONVERT(VARCHAR(9),CONVERT(date, 
CH.CreatedDate),6) As CreatedDate,TCH.CreatedDate as CreatedDateTime, 
RepliedByUserID,RepliedMasterDBID from 
StreamLeaderMaster.dbo.TicketChatHistory TCH 
left join '[email protected] +'.dbo.tblSMSecurityUser U on 
U.UserID=TCH.RepliedByUserID 
left join StreamLeaderMaster.dbo.TicketMasterDB MD on 
MD.ID=TCH.RepliedMasterDBID 
LEFT JOIN StreamLeaderMaster.dbo.TicketMaster MasterDB on 
MasterDB.ID=TCH.TicketMasterID 
where TCH.TicketMasterID=1 and (TCH.IsDeleted <> 1 or TCH.IsDeleted IS 
NULL) order by CreatedDateTime desc' 
PRINT @SQL 
Exec(@SQL) 

連結するdbの名前が@dbnameの場合は、動作するはずです。 paramを変更するだけでなく、うまくいくはずです。

希望これは私が正しくあなたを理解し、あなたが複数のデータベースに対するクエリを生成する場合、カーソルはここにあなたの唯一のオプションであることを考える

関連する問題