sql server 2012 - Dynamic Operator In SQL -
i have problem.
declare @sql nvarchar(max) declare @max int set @max=10 declare @min int set @min=0 declare @oper nvarchar(40) set @oper='>' declare @value int set @value=0 declare @r_sql int set @sql='select @r_sql = case when'+cast(@value int)+cast(@oper nvarchar(1))+@min+' 1 else 0 end ' exec sp_executesql @sql, @value, @min, @max, @r_sql output select @r_sql
i want pass dynamic operator execute query says 'error converting data type varchar numeric.' got problem? please me. thanks, appreciate.
the +
operator in t-sql can bit wonky. if want concatenate strings, make sure input strings:
set @sql=n'select @r_sql = case when' +cast(@value nvarchar(max)) +@oper --already nvarchar, , length thing done automatically +cast(@min nvarchar(max)) +n' 1 else 0 end '
basically, sql server does, when sees +
, it's first instinct add 2 numbers.
- if things on both sides of
+
numbers, add them - if 1 of things number, try convert other , add them (if conversion fails, error message posted)
- if neither of things number, , sql server try string concatenation.
- (note in sql server dates special type of numbers)
so, in nutshell:
select 1+2 => yields number 3 select 1+'2' => yields number 3 select '1'+2 => yields number 3 select '1'+'2' => yields string '12' select 1+'a' => conversion failed error select 'a'+2 => conversion failed error select 'a'+'b' => yields string 'ab'
alternatively, if on sql server 2012 , above, can use concat
function, converts feed string, , concatenates strings
set @sql=concat(n'select @r_sql = case when', @value, @oper, @min, n' 1 else 0 end ')
Comments
Post a Comment