Varchar и дата несовместимы с SQL - PullRequest
0 голосов
/ 24 мая 2018

Я написал приведенный ниже SQL и пытаюсь сделать это, используя переменные.

--Select DB
USE [gkretail_master]

--Declare Varibles
DECLARE @StartDate DATE;
DECLARE @EndDate DATE;
DECLARE @SQL VARCHAR(8000);

--Set Variables
SET @StartDate = '2018-05-23 00:00:00.000';
SET @EndDate = '2018-05-23 23:59:00.000' 
SET @SQL =
        'SELECT
            RETAIL_STORE_NUMBER AS ''Store Number'',
            DESCRIPTION_1 AS ''Store Name'', 
            CAST(SUM(BRUTTOGES) AS DECIMAL(18,2)) AS ''Total Taken''
        FROM [GKRETAIL_MASTER].[GK_BONKOPF] 
            JOIN [gkretail_master].[GK_STORE_DATA] ON [GK_BONKOPF].[ID_BSNGP] = [GK_STORE_DATA].[ID_BSNGP]
        WHERE 
            AKTDAT > '+ @StartDate +' 
        AND 
            AKTDAT < '+ @EndDate +' 
        GROUP BY [GK_BONKOPF].[ID_BSNGP], DESCRIPTION_1, RETAIL_STORE_NUMBER';

EXECUTE(@SQL);

Однако он возвращает ошибку:

Типы данных varchar и date несовместимы вОператор добавления.

Я провел поиск в Google и попытался разрешить его, используя как CAST, так и конвертирование, но он выдает больше ошибок.

Есть идеи?

1 Ответ

0 голосов
/ 24 мая 2018

Точно.Это одна из важных причин, по которой вы должны передавать параметры, используя sp_executesql:

SET @SQL =
        'SELECT
            RETAIL_STORE_NUMBER AS ''Store Number'',
            DESCRIPTION_1 AS ''Store Name'', 
            CAST(SUM(BRUTTOGES) AS DECIMAL(18,2)) AS ''Total Taken''
        FROM [GKRETAIL_MASTER].[GK_BONKOPF] 
            JOIN [gkretail_master].[GK_STORE_DATA] ON [GK_BONKOPF].[ID_BSNGP] = [GK_STORE_DATA].[ID_BSNGP]
        WHERE 
            AKTDAT > @StartDate 
        AND 
            AKTDAT < @EndDate 
        GROUP BY [GK_BONKOPF].[ID_BSNGP], DESCRIPTION_1, RETAIL_STORE_NUMBER';

EXEC sp_executesql @SQL,
     N'@StartDate date, @EndDate date',
     @StartDate = @StartDate, @EndDate = @EndDate;
...