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

Popular posts from this blog

windows - Single EXE to Install Python Standalone Executable for Easy Distribution -

c# - Access objects in UserControl from MainWindow in WPF -

javascript - How to name a jQuery function to make a browser's back button work? -