我有一个动态的SQL下面
Declare @Sql varchar(max)
Set @Sql = 'select... where c='+@param+' and d=d' //some sql text more than varchar(4000)
当我使用代码执行像这样的SQL
时string text = @
' Declare @Sql varchar(max)
Set @Sql = 'select... where c='+@param+' and d=d' //some sql text more than varchar(4000)'
SqlCommand command = new SqlCommand();
command.CommandType = CommandType.Text;
command.CommandText = text
command.Parameters.Add(new SqlParameter("@param","'strParam'"));
command.ExecuteNonQuery();//get error here.error is 'An expression of non-boolean type specified in a context where a condition is expected, near 'jok_a'.
似乎动态sql在set语句中被截断了。
我在线搜索并知道在这种情况下连接字符串时会发生隐式转换,这会导致varchar(8000)
varchar(4000)
。他们建议我将varchar(8000)
更改为varchar(max)
,但仍会收到错误。
我不喜欢使用像@sql=@sql(4000 part) +'...'(rest part)
这样的东西。如果我只是想调整sql,还有另一种解决方法吗?
答案 0 :(得分:1)
请尝试这样:
此处不需要DECLARE
和SET
,只需删除它并仅使用 SELECT
语句。
string text = @"select... where c=" + @param + " and d = d";
答案 1 :(得分:0)
也许你的@param是varchar(4000)?您需要在连接中包含至少一个带有(max)的变量。
例如
Declare @Sql varchar(max)
set @Sql = ''
Set @Sql = @Sql + 'select... where c='+@param+' and d=d' //some sql text more than varchar(4000)