Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在SQL Server中的视图中引用变量_.net_Sql Server_Vb.net - Fatal编程技术网

.net 在SQL Server中的视图中引用变量

.net 在SQL Server中的视图中引用变量,.net,sql-server,vb.net,.net,Sql Server,Vb.net,我将对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, Quant

我将对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=SupplierList.ReorderNumber的ItemNumber引用表SupplierPOImport。我需要它引用视图中的ItemNumber,因为它正在与一个VB.NET应用程序通信,该应用程序将数据导入表SupplierPOImport。在这个视图中,我能够为应用程序中datagrid中的每一行编写逻辑

因此,我想要的是一种将我的查询与视图中的ItemNumber值进行比较的方法。REQ5的工作方式是,对于导入的每一行,它都会向VB.NET应用程序发回“是”或“否”。它检查当前ItemNumber是否等于查询返回的内容。查询有一个PONumber,clauseit从该视图中获取该PONumber。但是对于REQ 6,我需要一种引用ItemNumber的方法

本质上,每当查询中存在我的ItemNumber时,我希望它返回YES。我尝试使用TempItemNum=SupplierList.ReorderNumber,但SQL在查询中无法识别TempItemNumb

当我尝试执行此操作时,出现以下错误:

视图或函数“SupplierPOImport_Errors”包含自引用。视图或函数不能直接或间接引用自身


由于绑定错误,无法使用视图或函数“SupplierPOImport_Errors”。

在Req 6中,您对

SupplierPOImport_Errors 

该名称与您尝试创建的视图的名称相同。这就是问题所在。我想你们已经有一张同名的桌子了。如果是这种情况,只需为正在创建的视图使用不同的名称即可。用T_u作为表格前缀,用V_u作为视图前缀是一种有用的命名约定,可以避免原始问题在列中返回YES或NO,而作为答案的函数返回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

这不是很清楚。我们没有完整的视图,一些示例数据和期望的结果将非常有用。请发布整个视图。如果一个问题太大了,你需要找到一个最小的版本给我们看。谢谢。我已经添加了我正在使用的整个视图。现在这有用吗?我还在为视图中的ItemNumber挠头。这是什么意思?它对应用程序有什么影响?它保存表中每一行的不同ItemNumber,因此它进行计算并将每一行的数据传递给应用程序。表名为SupplierPOImport,视图名为SupplierPOImport_Errors,按照我编写Req 5的方式,我可以做我想做的事情,但这对Req 6不起作用。请再看一看Req 6的第4行对不起,我一点也不清楚。我应该更清楚地回答我的问题。我在视图中所做的是:-REQ 6情况下,当ItemNumber=选择dbo.MCS\u CheckPrimarySupplierItemNumber,然后“YES”或“NO”结束为“PRIMARY”,因此,此函数仅返回一个应等于视图中当前ItemNumber的值。。。这有意义吗?我不是一个SQL爱好者,我主要是为NAV开发的,所以SQL是一个新领域。当我调用一个函数并传入ItemNumber时,我可以在查询中使用它来引用我显示的函数,但是当我在视图中编写相同的查询时,我不能引用我现在传递的ItemNumber。。。这是否说明了问题?…视图是否返回了正确的结果?如果没有,为什么?在我的回答中,它做的事情完全相同,只是您没有使用昂贵的函数。“视图中的当前项”只是“SupplierPOImport.ItemNumber”