मैं त्रुटि हो रही है में कास्ट का उपयोग कर 'त्रुटि परिवर्तित डेटा प्रकार nvarchar फ्लोट करने के लिए' जब निम्नडेटा रूपांतरण त्रुटि जब एक मामला बयान
declare
@completeCommand nvarchar (max) = 'x'
,@paramVal nvarchar (100)
,@paramName nvarchar (100)
,@paramType nvarchar (100)
,@tempParam sql_variant
declare @parameterList table (
RowID int identity (1,1)
,ParameterValue nvarchar (100)
,ParameterName nvarchar (100)
,ParameterType nvarchar (100)
)
insert into @parameterList
values
('10', 'Param1', 'int')
,('test', 'Param2', 'nvarchar')
-- Process each parameter one at a time
declare ParameterCursor cursor fast_forward for
select ParameterValue, ParameterName, ParameterType
from @parameterList
order by RowID
open ParameterCursor
fetch next from ParameterCursor into @paramVal, @paramName, @paramType
if @@FETCH_STATUS = 0
set @completeCommand = @completeCommand + ' '
while @@FETCH_STATUS = 0
begin
print @completeCommand
-- verify the datatype is correct
set @tempParam = case @paramType
when 'int' then CAST (@paramVal as int)
when 'float' then CAST (@paramVal as float)
when 'nvarchar' then CAST (@paramVal as nvarchar)
else 'NULL'
end
set @completeCommand = @completeCommand + @paramName + ' = ' + @paramVal + ','
fetch next from ParameterCursor into @paramVal, @paramName, @paramType
end
close ParameterCurosr
deallocate ParameterCursor
चल मुझे क्या करना कोशिश कर रहा हूँ की पुष्टि है कि उपयोगकर्ता दर्ज किया गया डेटा डेटा कमांड स्ट्रिंग में जोड़े जाने से पहले अपेक्षित डेटा प्रकार से मेल खाता है। उपर्युक्त कोड विफल होने पर कोई प्रतिक्रिया बहुत सराहना की जाएगी।
चीयर्स, जो
मौलिक दोष - आप डेटा प्रकार के लिए उपयोगकर्ता इनपुट पर भरोसा कर रहे हैं। सिर्फ इसलिए कि मैं डेटा को "NVARCHAR" के रूप में टैग करता हूं, इसका मतलब यह नहीं है।आपको संख्यात्मक डेटा प्रकार पर कास्टिंग करने से पहले पुष्टि करने के लिए ISNUMERIC का उपयोग करने पर विचार करना चाहिए। –
यह सच हो सकता है। लेकिन यह स्पष्ट नहीं करता है कि क्यों केस स्टेटमेंट सही WHEN क्लॉज का चयन नहीं करता है। –
सावधान रहें, ISNUMERIC एक "IsAllDigits" फ़ंक्शन नहीं है। इस आलेख पर एक नज़र डालें (साइट पर मुफ्त पंजीकरण): http://www.sqlservercentral.com/articles/IsNumeric/71512/ – Tony