MSSQL - 特殊字符语法 [英] MSSQL - Special character syntax

查看:254
本文介绍了MSSQL - 特殊字符语法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我是MSSQL的新手。我有一个查询,我创建了2个CTE。然后使用第一个内连接更新第二个。这似乎一切正常,当我想运行我的最终选择时,问题就出现了,因为SQL Server Management工作室不会识别我以前的CTE,建议我的语法不正确。



我可以发布所有内容,但简单地说是:



; WITH CTE1 AS(很多代码),

CTE2 AS(很多代码)

UPDATE CTE2一些代码;



SELECT



在SELECT中,CTE不是一个选项。在CTE2 AS()之后是否应该有一些其他特殊字符或UPDATE语句之后有什么不同?

Hello, I'm fairly new to MSSQL. I have a query where I create 2 CTEs. The second one is then updated using an inner join to the first. This seems to be all working, the problem then occurs when I want to run my final select as the SQL Server Management studio wont' recognize my previous CTE's, suggesting I have the syntax incorrect.

I can post it all, but briefly it is:

;WITH CTE1 AS (Lots of code),
CTE2 AS (Lots of Code)
UPDATE CTE2 some code;

SELECT

At the SELECT the CTEs aren't an option. Should there be some other special character after the CTE2 AS () or something different after the UPDATE statement?

推荐答案

最后,它会出现一条消息'多部分标识符CTE2.STATUS可能不会受到限制所以我无法向前发展,因为我对于我能绑定的内容感到困惑。



DECLARE @ customerId INT,

@supplierId INT,

@subscriptionId INT



SET @customerId = 400 SET @supplierId = 1 SET @subscriptionId = 23471



; WITH CTE1 AS



SELECT derivedtbl2.fldSupplierId,derivedtbl2 .fldItemCode,derivedtbl2.fldIssueNumber,derivedtbl2.fldShipDate,derivedtbl2.fldStatus,derivedtbl2.fldIssueSequenceNumber,

tblSubscriptionSales_1.fldStatus AS子状态,tblSubscriptionSales_1.fldCustomerId

FROM

(SELECT TOP(100)PERCENT derivedtbl_1.fldSupplierId,derivedtbl_1.fldItemCode,tblSupplie rData_1.fldIssueNumber,tblSupplierData_1.fldShipDate,

tblSupplierData_1.fldStatus,tblSupplierData_1.fldIssueSequenceNumber

FROM

(SELECT fldSupplierId,fldItemCode

FROM tblSupplierData

WHERE(fldSupplierId = @supplierID)AND(fldSubscriptionId = @subscriptionId)

UNION ALL

SELECT fldSupplierId,fldItemCode <登记/>
从tblSubscriptionSales

,其中(fldSupplierId = @supplierID)AND(fldSubscriptionId = @subscriptionId)AND(fldCustomerId = @CustomerID))AS derivedtbl_1

INNER JOIN tblSupplierData AS tblSupplierData_1 ON derivedtbl_1.fldSupplierId = tblSupplierData_1.fldSupplierId

AND derivedtbl_1.fldItemCode = tblSupplierData_1.fldItemCode

ORDER BY tblSupplierData_1.fldShipDate DESC)AS derivedtbl2 INNER JOIN

tblSubscriptionSales AS tblSubscriptionSales_1 ON derivedtbl2.fldSupplierId = tblSubscriptionSales_1.fldSupplierId AND

derivedtbl2.fldItemCode = tblSubscriptionSales_1.fldItemCode

GROUP BY derivedtbl2.fldSupplierId,derivedtbl2.fldItemCode,derivedtbl2.fldIssueNumber,derivedtbl2.fldShipDate,derivedtbl2.fldStatus,derivedtbl2.fldIssueSequenceNumber,

tblSubscriptionSales_1 .fldStatus,tblSubscriptionSales_1.fldCustomerId

。具有(tblSubscriptionSales_1.fldCustomerId = @CustomerID)AND(tblSubscriptionSales_1.fldStatus = N'A')OR

(tblSubscriptionSales_1.fldCustomerId = @CustomerID )AND(tblSubscriptionSales_1.fldStatus = N'B')或

(tblSubscriptionSales_1.fldCustomerId = @customerId)AND(tblSubscriptionSales_1.fldStatus = N'E')或

( tblSubscriptionSales_1.fldCustomerId = @CustomerID)AND(tblSubscriptionSales_1.fldStatus = N'F ')OR

(tblSubscriptionSales_1.fldCustomerId = @CustomerID)AND(tblSubscriptionSales_1.fldStatus = N'G')OR

(tblSubscriptionSales_ 1.fldCustomerId = @customerId)AND(tblSubscriptionSales_1.fldStatus = N'P')

),



CTE2 AS



SELECT fldIssueNumber,MAX(fldSupplierId)AS Expr1,MAX(fldItemCode)AS Expr2,fldStatus

FROM tblSupplierData

GROUP BY fldIssueNumber,fldSupplierId,fldSubscriptionId,fldStatus

。具有(fldSubscriptionId = @subscriptionId)AND(fldSupplierId = @supplierId)AND(fldStatus = N'Y')

)中<无线电通信/>


UPDATE CTE2 SET CTE2.fldStatus ='N'来自CTE1 INNER JOIN CTE2 ON CTE2.Expr1 = CTE1.fldSupplierId和CTE2.Expr2 = CTE1.fldItemCode



SELECT tblSupplierData.fldSupplierId,tblSupplierData.fldItemCode

FROM tblSupplierData

WHERE(CTE2.fldStatus<> N'N')

INNER JOIN CTE2 AS tblSupplierData.fldSupplierId = CTE2.fldSupplierId AND tblSupplierData.fldItemCode = CTE2.fldItemCode
At the end, it is coming up with a message 'MULTI-PART IDENTIFIER CTE2.STATUS COULD NOT BE BOUND" so I can't more forward as i'm confused as to what I can bind too.

DECLARE @customerId INT,
@supplierId INT,
@subscriptionId INT

SET @customerId = 400 SET @supplierId = 1 SET @subscriptionId = 23471

;WITH CTE1 AS
(
SELECT derivedtbl2.fldSupplierId, derivedtbl2.fldItemCode, derivedtbl2.fldIssueNumber, derivedtbl2.fldShipDate, derivedtbl2.fldStatus, derivedtbl2.fldIssueSequenceNumber,
tblSubscriptionSales_1.fldStatus AS SubStatus, tblSubscriptionSales_1.fldCustomerId
FROM
(SELECT TOP (100) PERCENT derivedtbl_1.fldSupplierId, derivedtbl_1.fldItemCode, tblSupplierData_1.fldIssueNumber, tblSupplierData_1.fldShipDate,
tblSupplierData_1.fldStatus, tblSupplierData_1.fldIssueSequenceNumber
FROM
(SELECT fldSupplierId, fldItemCode
FROM tblSupplierData
WHERE (fldSupplierId = @supplierID) AND (fldSubscriptionId = @subscriptionId)
UNION ALL
SELECT fldSupplierId, fldItemCode
FROM tblSubscriptionSales
WHERE (fldSupplierId = @supplierID) AND (fldSubscriptionId = @subscriptionId) AND (fldCustomerId = @customerID)) AS derivedtbl_1
INNER JOIN tblSupplierData AS tblSupplierData_1 ON derivedtbl_1.fldSupplierId = tblSupplierData_1.fldSupplierId
AND derivedtbl_1.fldItemCode = tblSupplierData_1.fldItemCode
ORDER BY tblSupplierData_1.fldShipDate DESC) AS derivedtbl2 INNER JOIN
tblSubscriptionSales AS tblSubscriptionSales_1 ON derivedtbl2.fldSupplierId = tblSubscriptionSales_1.fldSupplierId AND
derivedtbl2.fldItemCode = tblSubscriptionSales_1.fldItemCode
GROUP BY derivedtbl2.fldSupplierId, derivedtbl2.fldItemCode, derivedtbl2.fldIssueNumber, derivedtbl2.fldShipDate, derivedtbl2.fldStatus, derivedtbl2.fldIssueSequenceNumber,
tblSubscriptionSales_1.fldStatus, tblSubscriptionSales_1.fldCustomerId
HAVING (tblSubscriptionSales_1.fldCustomerId = @customerId) AND (tblSubscriptionSales_1.fldStatus = N'A') OR
(tblSubscriptionSales_1.fldCustomerId = @customerId) AND (tblSubscriptionSales_1.fldStatus = N'B') OR
(tblSubscriptionSales_1.fldCustomerId = @customerId) AND (tblSubscriptionSales_1.fldStatus = N'E') OR
(tblSubscriptionSales_1.fldCustomerId = @customerId) AND (tblSubscriptionSales_1.fldStatus = N'F') OR
(tblSubscriptionSales_1.fldCustomerId = @customerId) AND (tblSubscriptionSales_1.fldStatus = N'G') OR
(tblSubscriptionSales_1.fldCustomerId = @customerId) AND (tblSubscriptionSales_1.fldStatus = N'P')
),

CTE2 AS
(
SELECT fldIssueNumber, MAX(fldSupplierId) AS Expr1, MAX(fldItemCode) AS Expr2, fldStatus
FROM tblSupplierData
GROUP BY fldIssueNumber, fldSupplierId, fldSubscriptionId, fldStatus
HAVING (fldSubscriptionId = @subscriptionId) AND (fldSupplierId = @supplierId) AND (fldStatus = N'Y')
)

UPDATE CTE2 SET CTE2.fldStatus = 'N' FROM CTE1 INNER JOIN CTE2 ON CTE2.Expr1 = CTE1.fldSupplierId AND CTE2.Expr2 = CTE1.fldItemCode

SELECT tblSupplierData.fldSupplierId, tblSupplierData.fldItemCode
FROM tblSupplierData
WHERE (CTE2.fldStatus <> N'N')
INNER JOIN CTE2 AS tblSupplierData.fldSupplierId = CTE2.fldSupplierId AND tblSupplierData.fldItemCode = CTE2.fldItemCode


这篇关于MSSQL - 特殊字符语法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆