.net - 在 SQL Server 的视图中引用变量
问题描述
我要修改 SQL Server 中的视图。下面是查看代码:
ALTER View [dbo].[SupplierPOImport_Errors]
AS
SELECT
SupplierName,
Case SupplierID WHEN 0 THEN 'NO' ELSE 'YES' END AS 'SupplierFound',
PONumber,
InvoiceNumber,
InvoiceDate,
ItemNumber,
ItemBarcode,
Description,
Quantity,
Cost,
Tax,
Case ItemID WHEN 0 THEN 'NO' ELSE 'YES' END AS 'ItemFound',
Case PurchaseOrderID WHEN 0 THEN 'NO' ELSE 'YES' END AS 'POFound',
--Case Quantity WHEN 0 THEN 'NO' ELSE 'YES' END AS 'UnderSupplied',
(SELECT SUM(quantity * Cost) FROM SupplierPOImport) AS TotalExGST,
(SELECT SUM(quantity * Cost * (100 + Tax)/100) FROM SupplierPOImport) AS TotalIncGST,
-- REQ 5
Case WHEN ItemNumber = (SELECT OrderNumber
FROM [RMS_SO_SM_PO].[dbo].[PurchaseOrderEntry]
INNER JOIN
[RMS_SO_SM_PO].[dbo].[PurchaseOrder]
ON PurchaseOrder.ID = PurchaseOrderEntry.PurchaseOrderID
WHERE
PurchaseOrder.PONumber = SupplierPOImport.PONumber AND
PurchaseOrderEntry.OrderNumber = SupplierPOImport.ItemNumber) THEN 'NO' ELSE 'YES' END as 'POAdded',
-- REQ 6 A
CASE WHEN EXISTS(SELECT ItemNumber FROM SupplierPOImport t1
INNER JOIN SupplierList t2 ON t1.ItemNumber = t2.ReorderNumber
INNER JOIN ITEM t3 ON t2.ItemID = t3.ID
INNER JOIN SupplierPOImport_Errors t ON t.ItemNumber = t1.ItemNumber
WHERE
t3.SupplierID = t1.SupplierID AND
t1.ItemNumber = t2.ReorderNumber AND
t1.ItemNumber = t.ItemNumber)
THEN 'YES' ELSE 'NO' END AS 'PRIMARY'
FROM SupplierPOImport
GO
REQ 6 返回多个记录,因为 ItemNumber forItemNumber = SupplierList.ReorderNumber
指的是 table SupplierPOImport
。我需要它来引用视图中的 ItemNumber,因为它正在与 VB.NET 应用程序对话,该应用程序将数据导入表 SupplierPOImport。使用视图,我可以为应用程序中数据网格中的每一行编写逻辑。
所以,我想要一种将我的查询与我的视图中的 ItemNumber 值进行比较的方法。REQ 5 的工作方式是,对于导入的每一行,它都会向 VB.NET 应用程序返回一个“是”或“否”。它检查当前 ItemNumber 是否等于查询返回的值。该查询有一个 PONumber WHERE 子句(它从视图中获取)。但是对于 REQ 6,我想要一种引用 ItemNumber 的方法。
本质上,我希望它在查询中存在我的 ItemNumber 时返回 YES。我尝试使用 TempItemNum = SupplierList.ReorderNumber 但 SQL 无法识别查询中的 TempItemNumb。
当我尝试执行此操作时,我在下面收到此错误:
视图或函数“SupplierPOImport_Errors”包含自引用。视图或函数不能直接或间接引用自己。
由于绑定错误,无法使用视图或函数“SupplierPOImport_Errors”。
解决方案
您的原始问题在列中返回“是”或“否”,但您作为答案提出的函数返回 ItemNumber。所以这里是你想要什么的猜测。
您发布的 SQL 实际上非常接近所需的内容。请试试这个,如果它不是你想要的,请解释为什么它不同。
我在这里只写了一篇专栏。如果这是进步,我们可以在下一个专栏上工作。
ALTER View [dbo].[SupplierPOImport_Errors]
AS
SELECT
SupplierName,
Case SupplierID WHEN 0 THEN 'NO' ELSE 'YES' END AS 'SupplierFound',
PONumber,
InvoiceNumber,
InvoiceDate,
ItemNumber,
ItemBarcode,
Description,
Quantity,
Cost,
Tax,
Case ItemID WHEN 0 THEN 'NO' ELSE 'YES' END AS 'ItemFound',
Case PurchaseOrderID WHEN 0 THEN 'NO' ELSE 'YES' END AS 'POFound',
--Case Quantity WHEN 0 THEN 'NO' ELSE 'YES' END AS 'UnderSupplied',
(SELECT SUM(quantity * Cost) FROM SupplierPOImport) AS TotalExGST,
(SELECT SUM(quantity * Cost * (100 + Tax)/100) FROM SupplierPOImport) AS TotalIncGST,
CASE WHEN EXISTS (
SELECT *
FROM [dbo].[PurchaseOrderEntry]
INNER JOIN [dbo].[PurchaseOrder]
ON PurchaseOrder.ID = PurchaseOrderEntry.PurchaseOrderID
WHERE
PurchaseOrder.PONumber = I.PONumber AND
PurchaseOrderEntry.OrderNumber = I.ItemNumber
) THEN 'NO' ELSE 'YES' END as 'POAdded'
FROM SupplierPOImport I
推荐阅读
- python - 如何在保持所有内容对齐的同时将某些内容打印在单独的行上?
- etl - Metadata-DBConnection 和 tDBConnection 之间的区别。有没有相关性?
- javascript - Mongoose:无法将数据保存到空对象
- xsd - 加载 XML 和 XSD 文件后,如何从 Saxon 读取架构 (XSD)?
- powershell - 使用删除和插入在 powershell 中创建变量
- php - Laravel 中的 web.php、LoginController.php 和 AdminMiddleWare.php 之间的执行顺序(之后)是什么
- c++ - 对返回的局部变量的引用
- python - 我不能使用标签传递变量
- javascript - 在 ReactJS 中为可能的算术运算获取表单输入法的值
- azure-data-explorer - 用于分组 AppInsights 消息的 Kusto 查询