Sql “不是你平常的样子。”;无法绑定多部分标识符";错误
我有下面的查询,现在奇怪的是,如果我在我的开发和pre-prod服务器上运行这个查询,它运行得很好。如果我在生产环境中运行它,它就会失败 我发现,如果我只运行Select语句,它会很高兴,但一旦我尝试插入表变量,它就会抱怨Sql “不是你平常的样子。”;无法绑定多部分标识符";错误,sql,sql-server-2008,Sql,Sql Server 2008,我有下面的查询,现在奇怪的是,如果我在我的开发和pre-prod服务器上运行这个查询,它运行得很好。如果我在生产环境中运行它,它就会失败 我发现,如果我只运行Select语句,它会很高兴,但一旦我尝试插入表变量,它就会抱怨 DECLARE @RESULTS TABLE ( [Parent] VARCHAR(255) ,[client] VARCHAR(255) ,[ComponentName] VARCHAR(255) ,[DealName] VARCH
DECLARE @RESULTS TABLE
(
[Parent] VARCHAR(255)
,[client] VARCHAR(255)
,[ComponentName] VARCHAR(255)
,[DealName] VARCHAR(255)
,[Purchase Date] DATETIME
,[Start Date] DATETIME
,[End Date] DATETIME
,[Value] INT
,[Currency] VARCHAR(255)
,[Brand] VARCHAR(255)
,[Business Unit] VARCHAR(255)
,[Region] VARCHAR(255)
,[DealID] INT
)
INSERT INTO @RESULTS
SELECT DISTINCT
ClientName 'Parent'
,F.ClientID 'client'
,ComponentName
,A.DealName
,CONVERT(SMALLDATETIME , ISNULL(PurchaseDate , '1900-01-01')) 'Purchase Date'
,CONVERT(SMALLDATETIME , ISNULL(StartDate , '1900-01-01')) 'Start Date'
,CONVERT(SMALLDATETIME , ISNULL(EndDate , '1900-01-01')) 'End Date'
,DealValue 'Value'
,D.Currency 'Currency'
,ShortBrand 'Brand'
,G.BU 'Business Unit'
,C.DMRegion 'Region'
,DealID
FROM
LTCDB_admin_tbl_Deals A
INNER JOIN dbo_DM_Brand B
ON A.BrandID = B.ID
INNER JOIN LTCDB_admin_tbl_DM_Region C
ON A.Region = C.ID
INNER JOIN LTCDB_admin_tbl_Currency D
ON A.Currency = D.ID
INNER JOIN LTCDB_admin_tbl_Deal_Clients E
ON A.DealID = E.Deal_ID
INNER JOIN LTCDB_admin_tbl_Clients F
ON E.Client_ID = F.ClientID
INNER JOIN LTCDB_admin_tbl_DM_BU G
ON G.ID = A.BU
INNER JOIN LTCDB_admin_tbl_Deal_Components H
ON A.DealID = H.Deal_ID
INNER JOIN LTCDB_admin_tbl_Components I
ON I.ComponentID = H.Component_ID
WHERE
EndDate != '1899-12-30T00:00:00.000'
AND StartDate < EndDate
AND B.ID IN ( 1 , 2 , 5 , 6 , 7 , 8 , 10 , 12 )
AND C.SalesRegionID IN ( 1 , 3 , 4 , 11 , 16 )
AND A.BU IN ( 1 , 2 , 3 , 4 , 5 , 6 , 8 , 9 , 11 , 12 , 15 , 16 , 19 , 20 , 22 , 23 , 24 , 26 , 28 , 30 )
AND ClientID = 16128
SELECT ... FROM @Results
编辑-编辑-编辑-编辑-编辑-编辑-编辑
通过一个消除的过程,我发现了以下问题,并想知道是否有人能对此有所启发
有没有这些观点?我似乎记得在更改视图定义而不运行sp_refreshview之后,会出现类似这样的奇怪错误。我在任何地方都看不到文本“Tbl1021”,所以我假设这可能在视图定义中 如果是这样,这里有一个脚本来刷新所有视图 如果不在我的开发系统上运行代码,我首先要解决的问题是代码中别名的使用不一致 您应该尽可能地识别对象{owner}作为良好的编码实践 例如,在本例中,使用相关别名A、B、C等作为每个对象的前缀 例如,ClientName“Parent”将其设为A.ClientName“Parent” 如果此列在表中的别名为
SELECT DISTINCT
ClientName 'Parent'
,F.ClientID 'client'
,ComponentName
,A.DealName
,CONVERT(SMALLDATETIME , ISNULL(PurchaseDate , '1900-01-01')) 'Purchase Date'
,CONVERT(SMALLDATETIME , ISNULL(StartDate , '1900-01-01')) 'Start Date'
,CONVERT(SMALLDATETIME , ISNULL(EndDate , '1900-01-01')) 'End Date'
,DealValue 'Value'
,D.Currency 'Currency'
,ShortBrand 'Brand'
,G.BU 'Business Unit'
,C.DMRegion 'Region'
,DealID
FROM
LTCDB_admin_tbl_Deals A
好的,我仍然不知道是什么原因造成的,或者正确的答案是什么,但是我最后做了些什么来修复它
以前失败的所有查询现在都能完美地工作。非常奇怪的数据错误-您是否尝试过复制prod数据库(或至少相关表)并在测试中运行它?您的字段是否足够宽,可以接收您插入的数据?没有,我将尝试并提供建议。ThanxOk在我继续之前只是对我刚刚尝试的内容进行了更新,这更奇怪。我想,如果是数据错误,让我们尝试一个不同的TOP 1,它起作用了,但是没有不同TOP 1的SELECT也会返回1行并起作用,但一旦我添加了DISTINCT,它就不起作用了。因此,在所有情况下,它都返回一行,但在某些情况下它工作,而在某些情况下它不工作。这些不是视图,它们是同义词,指向不同的服务器。现在,在所有人都说服务器之间的数据存在差异之前,请阅读我对这个问题的评论,关于它与DISTINCT有关,因为这是最奇怪的部分,SELECT总是返回一行,但如果我指定DISTINCT if,则会抛出错误。除此之外,这项工作一直持续到今天早上,我不知道有什么变化。所以基本上是什么导致了这个奇怪的错误嗯,我想也许可以用视图场景的缓存查询计划来解释。同义词的定义最近有变化吗?编辑-刚刚看到你说没有变化。我也同样感到困惑!看起来确实很奇怪。您连接到的服务器是所有SQL2008实例还是早期版本?你能用一个非常简单的查询来重现指向Tbl1021.ComponentName或Tbl1011.Currency的同义词吗?还是只有使用DISTINCT的复杂查询才会出现问题?好的,我尝试了以下方法:DECLARE@results TABLE(Currency VARCHAR(255))INSERT INTO@results SELECT DISTINCT[Currency]FROM[WILLOW]。[LTCDB].LTCDB_admin.tbl_Currency无问题我现在为不同的ClientID再次尝试,有29行带或不带distinct,但我一指定distinct,它就导致了一个错误
INNER JOIN LTCDB_admin_tbl_Deal_Components H
ON A.DealID = H.Deal_ID
SELECT DISTINCT
ClientName 'Parent'
,F.ClientID 'client'
,ComponentName
,A.DealName
,CONVERT(SMALLDATETIME , ISNULL(PurchaseDate , '1900-01-01')) 'Purchase Date'
,CONVERT(SMALLDATETIME , ISNULL(StartDate , '1900-01-01')) 'Start Date'
,CONVERT(SMALLDATETIME , ISNULL(EndDate , '1900-01-01')) 'End Date'
,DealValue 'Value'
,D.Currency 'Currency'
,ShortBrand 'Brand'
,G.BU 'Business Unit'
,C.DMRegion 'Region'
,DealID
FROM
LTCDB_admin_tbl_Deals A