Hello, I passed a sql function to sas code and everything is ok, but in SQL it takes a few seconds and when I load my sas code It takes more than hour. I tried a lot of things to impruve it but anything it was ok. I don´t know what can I do more and for that reason write here. Thank you. I use Enterprise Guide 7.15 HF2 (7.100.5.6112) (64-bit). I attach 3 programs: First, the create calls the function document, and this calls to the MacroSelecionCalle. The sql function is ALTER FUNCTION [dbo].[SeleccionaCalle_NEW] ( -- Add the parameters for the function here @ano char(4), @ArticleNr_unv int, --@Padre sysname, @Grade sysname, @TipoColor sysname, @Standard sysname, @VolumenIBP float ) RETURNS int AS BEGIN -- Declare the return variable here DECLARE @Calle int --@Calle=0 indica que no se ha encontrado calle -- Declaración de resto de varaibles DECLARE @MaxRegla int -- Total de reglas existentes DECLARE @Orden int -- Cursor de regla evaluada (de 1 a @MaxRegla) DECLARE @CalleRegla int -- Calle a la que aplica la regla evaluada --- inicializa variables SET @Calle=0; -- sólo si cumple alguna regla, se cambia el valor SET @MaxRegla= (SELECT MAX(RG.Orden) FROM dbo.PT_T_SC_ReglasCalle AS RG WHERE [Enabled] = 1 and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ReglasCalle] where @ano <= Año)); -- Menor prioridad. SET @Orden=1; -- Mayor prioridad SET @CalleRegla = (SELECT RG.Calle FROM dbo.PT_T_SC_ReglasCalle AS RG WHERE Orden=@Orden and [Enabled] = 1 and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ReglasCalle] where @ano <= Año)); SET @TipoColor = LTRIM(@TipoColor) -- iterar hasta que una calle cumpla o se acaben las reglas. WHILE @Orden <= @MaxRegla and @Calle=0 BEGIN -- Verificar si existe el padre --IF (select COUNT(*) from dbo.PT_T_SC_ListaPadres where Calle=@CalleRegla and Padre=@Padre and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ListaPadres] where @ano <= Año))>0 IF (select COUNT(*) from dbo.PT_T_SC_ListaPadres where Calle=@CalleRegla and articleNr_unv=@ArticleNr_unv and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ListaPadres] where @ano <= Año))>0 BEGIN -- Existe un Padre producido con anteriordad en esta calle -- Es Standard? -- 13/01/2014 DaniReseco: Saco los comentarios de la validacion de standard y volumen -- email Rocio 13/01/2014 IF @Standard='Standard' SET @Calle = @CalleRegla ELSE -- No es standard -- Es superior al Volumen mínimo? IF (SELECT RG.LotMin FROM dbo.PT_T_SC_ReglasCalle AS RG WHERE Orden=@Orden and [Enabled] = 1 and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ReglasCalle] where @ano <= Año))<=@VolumenIBP SET @Calle=@CalleRegla END ELSE -- Este Padre no existe en esta regla de calle BEGIN -- Verificar si Existe Grade asignado a la calle IF (select COUNT(*) from dbo.PT_T_SC_ListaGrades where Calle=@CalleRegla and Grade=@Grade and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ListaGrades] where @ano <= Año))>0 BEGIN -- Existe grade disponible en esta calle -- Validar si Cualquier TipoColor IF (SELECT RG.AllTipoColor FROM dbo.PT_T_SC_ReglasCalle AS RG WHERE Orden=@Orden and [Enabled] = 1 and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ReglasCalle] where @ano <= Año))=-1 BEGIN -- Cualquier tipo Color -- Validar si es standard IF @Standard='Standard' SET @Calle = @CalleRegla ELSE -- No es standard -- Es superior al Volumen mínimo? IF (SELECT RG.LotMin FROM dbo.PT_T_SC_ReglasCalle AS RG WHERE Orden=@Orden and [Enabled] = 1 and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ReglasCalle] where @ano <= Año))<=@VolumenIBP SET @Calle=@CalleRegla END ELSE -- No está marcado cualquier TipoColor -- Validar si existe TipoColor en esta Calle IF (select COUNT(*) from dbo.PT_T_SC_ListaTipoColor where Calle=@CalleRegla and TipoColor=@TipoColor and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ListaTipoColor] where @ano <= Año))>0 BEGIN -- Existe Este tipoColor en esta Calle -- Validar si es standard IF @Standard='Standard' SET @Calle = @CalleRegla ELSE -- No es standard -- Es superior al Volumen mínimo? IF (SELECT RG.LotMin FROM dbo.PT_T_SC_ReglasCalle AS RG WHERE Orden=@Orden and [Enabled] = 1 and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ReglasCalle] where @ano <= Año))<=@VolumenIBP SET @Calle=@CalleRegla END END END SET @Orden=@Orden+1 SET @CalleRegla = (SELECT RG.Calle FROM dbo.PT_T_SC_ReglasCalle AS RG WHERE Orden=@Orden and [Enabled] = 1 and Año = (SELECT min([Año]) FROM [PricingTool].[dbo].[PT_T_SC_ReglasCalle] where @ano <= Año)) END -- Return the result of the function RETURN @Calle; END
... View more