question

tompratt avatar image
tompratt asked

table value function fails at DECLARE. uses table variables

i have a stored procedure that works fine that i am converting to a function. this fails at declare. i can run the query from declare down the page and it returns expected results so that is working. i just can't figure out how to load this or execute it to be on database.

USE [VENDOR]
GO
/****** Object:  StoredProcedure [dbo].[sp_LoadVendorMisMatch_STEP]    Script Date: 5/14/2019 9:32:39 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE FUNCTION [dbo].[fn_LoadVendorMisMatch_STEP]()
RETURNS (
AS BEGIN
DECLARE @t1 TABLE (
   IMS_pro_code [int] NOT NULL,
       IMS_Catalogue [varchar](80) NULL,
       IMS_Description [varchar](400) NULL,
       IMS_StockCode[varchar](20) NULL,
       IMS_SupplierCode [int] NULL,
       IMS_SupplierName [varchar](100) NULL,
       Comment [nvarchar](1000) NULL);
DECLARE @s TABLE (
       IMS_Catalogue [varchar](80) NULL,
   CU_Catalog [nvarchar](80) NULL,       
   IMS_SupplierCode [int] NULL,       
   IMS_SupplierName [varchar](100) NULL,
       IMS_Description [varchar](400) NULL,   
   IMS_pro_code [int] NOT NULL,
   CU_Description  [varchar](400) NULL, 
   CU_SupplierCode [int] NULL)
--Load all unknown products since last load
INSERT INTO @t1
SELECT IMS_pro_code,
       IMS_Catalogue,
       IMS_Description,
       IMS_StockCode,
       IMS_SupplierCode,
       IMS_SupplierName,
       Comment
FROM [Product_CostUpdate_Analysis]
WHERE Reconciled = 'U'
      AND LoadedToMisMatch IS NULL
GROUP BY IMS_pro_code,
         IMS_Catalogue,
         IMS_Description,
         IMS_StockCode,
         IMS_SupplierCode,
         IMS_SupplierName,
         Comment;
--of the products loaded, check to see if we can identify any matches via special characters
INSERT INTO @s
SELECT a.[IMS_Catalogue] AS IMS_Catalog,
       c.CATALOG AS CU_Catalog,
       a.[IMS_SupplierCode] AS IMS_SupplierCode,
       a.[IMS_SupplierName] AS IMS_SupplierName,
       a.IMS_Description AS IMS_Description,
       a.[IMS_pro_code],
       c.DESCRIPTION AS CU_Description,
       c.[SUPPLIER CODE] AS CU_SupplierCode
FROM [VENDOR].[dbo].[Product_CostUpdate_Analysis] a
     JOIN [VENDOR].[dbo].[Vendor_CU_Archive] c ON [dbo].RemoveSpecial(a.[IMS_Catalogue]) = [dbo].RemoveSpecial(c.[CATALOG])
AND a.IMS_SupplierCode = c.[SUPPLIER CODE]
WHERE a.reconciled = 'U'
      AND LoadedToMisMatch IS NULL;
--Update table to include a comment for any special characters
UPDATE @t1
  SET
      Comment = 'Check for special characters'
WHERE IMS_pro_code IN(SELECT [IMS_pro_code]
                      FROM @s);
-- Update analysis to indicate we are loading them to STEP
UPDATE pa
  SET
      pa.LoadedToMisMatch = GETDATE()
FROM [Product_CostUpdate_Analysis] pa
WHERE IMS_pro_code IN(SELECT IMS_pro_code
                      FROM @t1);
-- This is the list to load into STEP
SELECT *
FROM @t1
)
t-sql
10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

0 Answers

·

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.