2013-04-15 2 views
0

Привет Я пытаюсь выполнить следующий запрос, не повезло:Вызов функции (на другой дб) с видом

SELECT AA.Id, AA.ObjId, AA.NsId, AA.statusId, AA.LCID, AA.Title, AA.MessageBody_ClearText, AA.MessageBody_HTMLText, 
       AA.File1, AA.File2, AA.File3, AA.Status, AA.name, AA.createdate, AA.updatedate, AA.boneid, AA.main, AA.Sort, 
       BB.ID AS Expr1, BB.MainIDNum, BB.MessageID, BB.Message1, BB.Message2, BB.Message3, BB.MessageDate, 
       BB.AttachmentGUID1, BB.AttachmentGUID2, CC.MessageID AS Expr2, CC.Identification, CC.Viewed, CC.Deleted, CC.Id AS Expr3, 
       AA.FileName1, AA.FileName2, AA.FileName3 
FROM dbo.gnvw_ObjectsBones AS AA INNER JOIN 
       --- XXX.dbo.MESSAGES AS BB ON BB.MessageID = AA.ObjId LEFT OUTER JOIN --- 
       dbo.PersonalMessages AS CC ON CC.MessageID = BB.MessageID AND CC.Identification = BB.MainIDNum 

Выделенная линия нужно быть изменение вызова функции, у меня есть функция называется «GetMessages», которая принимает Int «вход» и его '' s должно быть, что один: „CC.Identification“, так что я пытался заменить его быть похожим на это:

SELECT AA.Id, AA.ObjId, AA.NsId, AA.statusId, AA.LCID, AA.Title, AA.MessageBody_ClearText, AA.MessageBody_HTMLText, 
       AA.File1, AA.File2, AA.File3, AA.Status, AA.name, AA.createdate, AA.updatedate, AA.boneid, AA.main, AA.Sort, 
       BB.ID AS Expr1, BB.MainIDNum, BB.MessageID, BB.Message1, BB.Message2, BB.Message3, BB.MessageDate, 
       BB.AttachmentGUID1, BB.AttachmentGUID2, CC.MessageID AS Expr2, CC.Identification, CC.Viewed, CC.Deleted, CC.Id AS Expr3, 
       AA.FileName1, AA.FileName2, AA.FileName3 
FROM dbo.gnvw_Data_PersonalMessages_ObjectsBones AS AA INNER JOIN 
       XXX.dbo.GetMessages(CC.Identification) AS BB ON BB.MessageID = AA.ObjId LEFT OUTER JOIN 
       dbo.PersonalMessages AS CC ON CC.MessageID = BB.MessageID AND CC.Identification = BB.MainIDNum 

Я также пробовал другие решения, но никто из них не работал, кто-нибудь здесь видит проблему? Это ошибки, которые я получаю от запуска этого «решения»:

«Идентификатор из нескольких частей« CC.Identification »не может быть связан».

и

'недопустимое имя столбца 'ID'.' SQL не моя сильная сторона, я буду рад услышать любые решения, надеюсь, я объяснил это правильно.

+1

Вы ссылаетесь на 'CC', прежде чем он будет введен в предложение' FROM'? Фактически, вы каким-то образом вводите циклическую зависимость - поскольку значения для CC.Identification' зависят от условий соединения на 'CC', которые частично основаны на' BB'. Но теперь, чтобы определить «BB», мы нужно знать 'CC.Identification'? –

ответ

1

Когда вам нужно соединить табличное значение функции, используйте CROSS APPLY/OUTER APPLY вместо INNER/LEFT присоединяется соответственно.

... 
FROM dbo.gnvw_Data_PersonalMessages_ObjectsBones AS AA 

CROSS APPLY XXX.dbo.GetMessages(CC.Identification) AS BB 
.... 
WHERE BB.MessageID = AA.ObjID 

Update Я просто заметил, что условие соединения для dbo.AgamUsersPersonalMessages AS CC относится только к BB, и условие соединения для BB зависит только от CC. Это неверно, и вы все равно получите ошибку. Не зная, что вы хотите получить, я не могу дать вам решение; вам нужно выяснить условия соединения самостоятельно ...

Смежные вопросы