我得到一个错误

问题描述:

“‘从’关键字附近有语法错误”当我执行下面的代码:我得到一个错误

USE Database 
GO 

DECLARE @DF Datetime = CONVERT(datetime,'30/01/2017',103) 
DECLARE @DT Datetime = CONVERT(datetime,'13/03/2017',103) 

DECLARE @Owner nvarchar(255) = '[email protected]' 
DECLARE @Box nvarchar(255) = 'Sent Items' 
DECLARE @ResultTo int = 0 
DECLARE @ResultCC int = 0 
DECLARE @ResultBCC int = 0 

SET @ResultTo = COUNT(ToEmailAddress) FROM EmailTo 
WHERE fkDataExtractTableID IN 
    (
     SELECT DataExtractTableID 
     FROM [Database].[dbo].[DataExtractTable] 
     WHERE (DateSent between @DF AND @DT) 
     AND ([Owner] = @Owner) 
     AND (Box = @Box) 
    ) 

我收到此错误信息:

消息156,15级,状态1,行12
关键字'FROM'附近的语法不正确。

我错过了什么?

+7

因为您正在尝试使用具有常规'SELECT'语法的'SET'。它应该是'SET @ResultTo =(SELECT COUNT(ToEmailAddress)...)'或'SELECT @ResultTo = COUNT(ToEmailAddress)...' – ZLK

+0

奇怪的是,我原来用括号括起来, =标志,但仍然出现错误,但由于此处的评论,我现在已经开始工作了。 – Siv

下面是一个更正:

DECLARE @DF Datetime = CONVERT(datetime,'30/01/2017',103) 
DECLARE @DT Datetime = CONVERT(datetime,'13/03/2017',103) 

    DECLARE @Owner nvarchar(255) = '[email protected]' 
    DECLARE @Box nvarchar(255) = 'Sent Items' 
    Declare @ResultTo int = 0 
    Declare @ResultCC int = 0 
    Declare @ResultBCC int = 0 

    SELECT @ResultTo = COUNT(ToEmailAddress) FROM EmailTo 
    WHERE fkDataExtractTableID IN 
    (
     SELECT DataExtractTableID 
     FROM [Database].[dbo].[DataExtractTable] 
     WHERE (DateSent between @DF AND @DT) 
     AND ([Owner] = @Owner) 
     AND (Box = @Box) 
    ) 
+0

感谢这个解决方案,当然它修复了语法错误。我有三个从链接表中获取电子邮件数据的例程,我试图将TO,CC和BCC电子邮件的结果存储为一个数字,然后将该数字返回给调用方,以便在底部的某处我将返回值= ResultTo + ResultCC + resultBCC。尽管您的语法工作如何返回最终的总计作为查询结果,因为这只是提示消息说它已成功完成但没有显示结果? (不得不在符号处移除,因为系统不会让我贴上留下的符号)。 – Siv

+0

好吧我自己想到了我只是这样做的: 选择ATResult作为结果 最后(AT是符号)。 – Siv

我觉得你的SQL错误第12行可能是这样的:

SET @ResultTo = (select COUNT(ToEmailAddress) FROM EmailTo) 
+0

感谢这和上面的其他评论帮助我得到它的工作。 – Siv

更改您的变量赋值:

select @ResultTo = count(ToEmailAddress) from EmailTo 
+0

我可以知道上述答案中的错误吗? –

+0

谢谢你的帮助。我现在排序了。 – Siv

在选择查询中不能使用2种不同的语法。要么使用Set语句或使用简单的查询

SET语句 - 你设置一个变量作为SELECT查询

SET @ResultTo = (Select COUNT(ToEmailAddress) FROM EmailTo 
WHERE fkDataExtractTableID IN 
    (
     SELECT DataExtractTableID 
     FROM [Database].[dbo].[DataExtractTable] 
     WHERE (DateSent between @DF AND @DT) 
     AND ([Owner] = @Owner) 
     AND (Box = @Box) 
    )) 

和SELECT语句,您可以设置多个变量值像

回报
Select @ResultTo = COUNT(ToEmailAddress) 
--Aslo define other variable, if you want 
-- like @ResultTo1 , but this query is aggregation, so only aggeregate function use 
FROM EmailTo 
WHERE fkDataExtractTableID IN 
    (
     SELECT DataExtractTableID 
     FROM [Database].[dbo].[DataExtractTable] 
     WHERE (DateSent between @DF AND @DT) 
     AND ([Owner] = @Owner) 
     AND (Box = @Box) 
    )