Как избавиться от нескольких функций преобразования в следующем динамическом SQL?минимизация вызовов функций внутри динамического sql?
IF @MediaTypeID > 0 or @MediaGroupID > 0
BEGIN
SET @SQL = @SQL + 'INNER JOIN (SELECT lmc.ID FROM Lookup_MediaChannels (nolock) lmc
INNER JOIN Lookup_SonarMediaTypes (nolock) lsmt ON lmc.SonarMediaTypeID = lsmt.ID
WHERE (ISNULL('+ CONVERT(VARCHAR(10),@MediaTypeID) +',0) = 0 OR lsmt.ID = '+ CONVERT(VARCHAR(10),@MediaTypeID) +')
AND (ISNULL('+ CONVERT(VARCHAR(10),@MediaGroupID)+',0) = 0 OR lsmt.SonarMediaGroupID = '+ CONVERT(VARCHAR(10),@MediaGroupID) +'))t ON t.ID = lmc.ID '
Я попытался преобразовать их первым и использовать переменную вместо преобразовывают вызовов, как показано ниже
IF @MediaTypeID > 0 or @MediaGroupID > 0
BEGIN
SET @TypeID = CONVERT(VARCHAR(10),@MediaTypeID)
SET @GroupID = CONVERT(VARCHAR(10),@MediaGroupID)
SET @SQL = @SQL + 'INNER JOIN (SELECT lmc.ID FROM Lookup_MediaChannels (nolock) lmc
INNER JOIN Lookup_SonarMediaTypes (nolock) lsmt ON lmc.SonarMediaTypeID = lsmt.ID
WHERE (ISNULL('+ @TypeID +',0) = 0 OR lsmt.ID = '+ @TypeID +')
AND (ISNULL('+ @GroupID+',0) = 0 OR lsmt.SonarMediaGroupID = '+ @GroupID +'))'
END
но он дал мне эту ошибку
Msg 245, Level 16, State 1, строка 13
Ошибка преобразования при преобразовании значения varchar ', 0) = 0 ИЛИ lsmt.ID =' в тип данных int.