При выполнении динамического запроса преобразование поля имени в числа дает ошибку ?
Я работаю на SQL server 2012 и сталкиваюсь с проблемой, как показано ниже :
Msg 245, Уровень 16, Состояние 1, Строка 1
Преобразование не удалось при преобразовании значения nvarchar '1.2 kV' в тип данных int.
эта ошибка сделана там, где преобразование имени в число, но это не удалось .
в качестве примера имя имеет значение 1.2 v тогда если я получу числа из имени так будет 1.2 и в этом случае не будет получена ошибка
а если я найду N/A конвертировать в 0
так как же получить числа из имени, чтобы предотвратить его отображение этой ошибки .
Сгенерированный Запрос :
SELECT PartID, Code, Count(1) as ConCount FROM #PartAttributes PM INNER JOIN #Condition Co ON Co.ZfeatureKey = PM.ZfeatureKey Where 1=1 and ( (PM.ZfeatureKey = 1505730036 And replace(Name, 'VDC', space(4)) >1000) OR (PM.ZfeatureKey = 1505730036 And replace(Name, 'VDC', space(4)) >280) OR (PM.ZfeatureKey = 1505730036 And replace(Name, 'VDC', space(4)) = 'N/A') ) Group By PartID,Code Having Count(1)> = 4
вопрос по запросу выше по имени на условии Where .
Что я уже пробовал:
if object_id(N'tempdb..#PartAttributes') is not null drop table #PartAttributes if object_id(N'tempdb..#Condition') is not null drop table #Condition if object_id(N'tempdb..#Allfeatures') is not null drop table #Allfeatures if object_id(N'tempdb..#Codes') is not null drop table #Codes create table #Allfeatures ( ZPLID INT, ZFeatureKey nvarchar(20), IsNumericValue int ) insert into #Allfeatures(ZPLID,ZFeatureKey,IsNumericValue) values(75533,'1505730036',0) create table #Condition ( Code nvarchar(20), ZFeatureKey nvarchar(20), ZfeatureType nvarchar(20), EStrat nvarchar(20), EEnd NVARCHAR(10) ) insert into #Condition (Code,ZFeatureKey,ZfeatureType,EStrat,EEnd) values ('8535400000','1505730036',NULL,'>1000',' '), ('8535400000','1505730036',NULL,'>280AV',' '), ('8535400000','1505730036',NULL,'N/A',' '), ('8535400000','1505730036',NULL,NULL,' ') CREATE TABLE #PartAttributes ( PartID INT, ZFeaturekEY NVARCHAR(20), AcceptedValuesOption_Value INT, Name nvarchar(20) ) insert into #PartAttributes(PartID,ZFeaturekEY,AcceptedValuesOption_Value,Name) values (4977941,1505730036,280,'1.2kV'), (4977936,1505730036,280,'280VDC'), (4977935,1505730036,280,'100V'), (4977808,1505730036,280,'N/A'), (4979054,1505730036,280,'24VAC/DC') DECLARE @Sql nvarchar(max) DECLARE @ConStr nvarchar(max) SET @ConStr = STUFF(( SELECT CONCAT(' OR (PM.ZfeatureKey = ', CC.ZfeatureKey, IIF(CC.ZfeatureType = 'Qualifications', ' And AcceptedValuesOption_Value ', ' And replace(Name, ''VDC'', space(4)) '), CASE WHEN EStrat = 'N/A' THEN '= ''N/A''' ELSE CAST(LEFT(SUBSTRING(EStrat, PATINDEX('%[<>0-9.-]%', EStrat), 2500), PATINDEX('%[^<>0-9.-]%', SUBSTRING(EStrat, PATINDEX('%[<>0-9.-]%', EStrat), 2500) + 'X') -1) AS nvarchar(2500)) END, ')') FROM #Condition CC INNER JOIN #Allfeatures AL ON AL.ZfeatureKey = CC.ZfeatureKey AND AL.IsNumericValue = 0 WHERE EStrat IS NOT NULL FOR XML PATH(''), TYPE).value('(./text())[1]','varchar(max)'), 1, 3, '') ---------------- SET @Sql= CONCAT(' SELECT PartID, Code, Count(1) as ConCount FROM #PartAttributes PM INNER JOIN #Condition Co ON Co.ZfeatureKey = PM.ZfeatureKey ', 'Where 1=1 and (', @ConStr, ' ) Group By PartID,Code ' , ' Having Count(1)> = ',(SELECT COUNT(1) FROM #Condition)) EXEC (@SQL)