我正在尝试构建动态查询。最初@Query被设置为查询字符串,然后我想动态添加WHERE子句。它可以工作,除了在这种情况下@val不是在字符串周围放单引号。这会导致错误。如何包含单引号以便正确添加它们?
这是我尝试过的:
SET @Query = @Query + ' WHERE ' + '' + @param + ' ' + @operator + ' ' + '' + @val + '' ;
谢谢!
答案 0 :(得分:1)
您必须在引号之间放置引号,但要将其转义以便不会破坏您的代码。它看起来如下:
SET @Query = @Query + ' WHERE ' + '' + @param + ' ' + @operator + ' ' + '\'' + @val + '\'' ;
编辑: Eric Anderson的回答也适用。取自MySQL 5.0 Manual
引用“'”的字符串中的“'”可写为“''”。
答案 1 :(得分:0)
这有效:
SET @Query = @Query + ' WHERE ' + '' + @param + ' ' + @operator + ' ' + '''' + @val + '''' ;
编程有时可能非常愚蠢。好的' 4个单引号。
无论如何,谢谢你们。答案 2 :(得分:0)
试试这段代码:
DECLARE @SQ [varchar](1) = ''''
SET @Query = @Query + ' WHERE ' + @SQ + @param + @SQ + ' ' + @operator + ' ' + @SQ + @val + @SQ;
答案 3 :(得分:0)
Object.defineProperty(Vue.prototype, '$route', {
get: function get$1 () { return this.$root._route }
})
答案 4 :(得分:0)
如果您使用的是MySQL,则需要知道+
不是字符串连接运算符(这是Microsoft SQL Server和Access中的非标准语法)。
MySQL使用内置函数CONCAT():
SET @Query = CONCAT(@Query, ' WHERE ', @param, @operator, '?');
PREPARE stmt FROM @Query;
EXECUTE stmt USING @val;
DEALLOCATE stmt;
或者您可以设置ANSI模式(或更具体的PIPES_AS_CONCAT模式)并使用SQL标准字符串连接:
SET sql_mode = 'ANSI';
SET @Query = @Query || ' WHERE ' || @param || @operator || '?';
PREPARE stmt FROM @Query;
EXECUTE stmt USING @val;
DEALLOCATE stmt;
对于值,您不需要在SQL表达式中使用引号中的?
占位符,实际上它不能用引号括起来,否则它将是一个文字'?'
字符串,而不是参数占位符。
您无法参数化列名称或运算符,只能参数值。