Olá a todos, estou desenvolvendo uma procedure e não estou conseguindo, fiz o insert e o select fora da procedure manualmente e estão funcionando, o problema é quando eu quero, que e a procedure me retorne, mas
está dando o seguinte erro.
Mensagem 402, Nível 16, Estado 1, Procedimento Fpesquisa, Linha 52
Os tipos de dados varchar e time são incompatíveis no operador add.
Eu sei que tipos de dados as variaveis tem, mas não consigo identificar de quais variáveis está dando o erro, e como resolver.
Esta é a Script
USE [DATABASE]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Fpesquisa]
@DtIni date,
@DtFim date,
@REG bigint,
@SIS bigint,
@SS bigint,
@Interval bigint,
@URAC int,
@HrIni time,
@HrFim time
AS
BEGIN
SET NOCOUNT ON
DECLARE @Area nvarchar(max)
DECLARE @Table varchar(max)
DECLARE @SQL nvarchar(max)
SET @Table = 'Instrumentos_'
SET @Area = RTRIM(('U' + RIGHT(('0' + LTRIM(STR( @REG,2))),2) + RIGHT(('0' + LTRIM(STR( @SIS,2))),2) + RIGHT(('0' + LTRIM(STR( @SS,2))),2) + RIGHT(('0' + LTRIM(STR( @URAC,2))),2)))
SET @Table = @Table + @Area
IF OBJECT_ID('tempdb..#Tabpesquisa') IS NOT NULL
BEGIN
DROP TABLE #Tabpesquisa
END
CREATE TABLE #Tabpesquisa ( -- Criando tabela temporaria
Data date NULL,
Valord float NULL,
--Dia date NULL,
--Hora time NULL,
Valorh float,
Fpesquisa AS (Valord/Valorh*100)
)
BEGIN
SET @SQL ='
INSERT INTO #Tabpesquisa (Data, Valord, Valorh)
SELECT CAST (Data_Hora as date) AS Data,
--CAST (MAX (Data_Hora) as time) AS Hora,
AVG (CASE WHEN FLAG >= 1 THEN CAST (Valor as float) ELSE null END) AS Valord,
MIN (CASE WHEN CAST (Data_Hora as time) BETWEEN '''+@HrIni+''' AND '''+@HrFim+''' THEN CAST (Valor as float) else null end) as Valorh
FROM ' + @Table + '
WHERE Tag Like ''FIT%''
and FLAG > ''0''
and CAST (Data_Hora as date) BETWEEN '''+@DtIni+''' AND '''+@DtFim+'''
GROUP BY CAST (Data_Hora as date)
SELECT * FROM #Tabpesquisa'
Exec(@SQL)
END
END
Aqui está uma imagem, eu acredito que o erro esteja entro do @SQL
