2013-07-15 28 views
0
/****** Script for SelectTopNRows command from SSMS ******/ 
DECLARE @user int; 
DECLARE @aipNip varchar(20); 
DECLARE @accessToBaseCompanies TABLE (baseCompanyId INT); 

SET @user = 1; 

INSERT INTO @accessToBaseCompanies (baseCompanyId) 
((SELECT c.BaseCompanyFk FROM [dbo].Companies c WHERE c.CompaniesTeamFk IN (SELECT u.CompaniesTeamFk FROM [dbo].[CompaniesTeams_Users] u WHERE UserFk = @user)) 
UNION ALL 
(SELECT c.BaseCompanyFk FROM [dbo].Beneficiaries c WHERE c.DepartmentFk IN (SELECT u.DepartmentFk FROM [dbo].[Departments_Users] u WHERE UserFk = @user))) 

SET @aipNip = (SELECT TOP 1 fc.[PureNip] 
FROM [dbo].[BaseCompanies] bc 
INNER JOIN [dbo].[Companies] c ON bc.Id = c.BaseCompanyFk AND c.CompanyType = 1 
INNER JOIN [dbo].[Payment_Partners] fc ON fc.id = bc.CompanyPartnerFk) 

SELECT bc.[Id] 
     ,bc.[Name] as 'BaseCompany' 
     ,SUM(cd.[PaidAmountNavireo]) - SUM(cd.[GrossTotal]) 
     ,SUM(CASE WHEN (ps.Id = 1 OR ps.Id = 3) 
    FROM [dbo].[BaseCompanies] bc 
    INNER JOIN [dbo].[Payment_CostDocuments] cd ON bc.Id = cd.BaseCompanyFk 
    INNER JOIN [dbo].[PaymentStatuses] ps ON ps.Id = cd.PaymentStatusFk 
    INNER JOIN [dbo].[Payment_Partners] fc ON fc.Id = cd.PartnerFk 

    WHERE bc.[Id] IN @accessToBaseCompanies 

Team BY 
bc.[Id], 
bc.[Name] 

@accessToBaseCompanies不爲空,爲什麼當我嘗試執行查詢時出現錯誤:「@accessToBaseCompanies」附近的語法錯誤。WHERE語句中的TSQL表變量導致錯誤

回答

8

IN的參數是值列表或子查詢,而不是表格。嘗試:

WHERE bc.[Id] IN (select baseCompanyId from @accessToBaseCompanies) 
+0

謝謝,這幫助:) – Ellbar

3

的問題是這一行:

WHERE bc.[Id] IN @accessToBaseCompanies 

它應該是:

WHERE bc.[Id] IN (select baseCompanyId from @accessToBaseCompanies) 
1

推薦使用EXISTS代替,通常首先更高效(SQL Server IN vs. EXISTS Performance)。更換

WHERE bc.[Id] IN @accessToBaseCompanies 

通過

WHERE EXISTS (SELECT 1 FROM @accessToBaseCompanies a where a.baseCompanyId = bc.[Id])