在代码中有如下的需求:需要在数据库中使用 in 关键字做删除的时候,又需要使用到参数化,参数又是字符串,所以使用的时候就按照如下方式
StringBuilder sql = new StringBuilder("exec('delete from Base_SysMenu where Menu_Id in('+ @ids+')') ");
SqlParam[] sp ={
new SqlParam("@ids",ids)
};
数据库中的执行方式如下:
exec sp_executesql N'exec(''delete from Base_SysMenu where Menu_Id in(''+ @ids+'')'') ',N'@ids varchar(20)',@ids='''201603020530536752'''
经过以上需求后,总结:
在SQL字符串是以单引号作为分界符的,在字符串前面和后面各一个单引号。但是字符串中也能包含单引号,为了使语法分析器能够区分字符串中的单引号还是分界符。规定当字符串中出现单引号时,在其前面添加一个单引号作为区分。也就是说, 在单引号分隔的字符串中,两个连续的单引号''表示一个单引号字符。
参考实例:
declare @ids varchar()=''''''
exec( 'select * from Base_SysMenu where menu_id in('+@ids+')')