SQL存储过程,不可以用双引号替换单引号么?

wonkju 2013-07-02 11:53:36
execute ('Declare curCol Cursor for select distinct '+@showCol+' from '+@tableName+' for read only') -

//在存储中,定义存储的那里.怎么发现用双引号替换的话,颜色都不变.但是用单引号的话,三色就变了...是不是双引号只适用于 C#代码,或称后台代码...
...全文
754 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
soaringbird 2013-07-03
  • 打赏
  • 举报
回复
sql中双引号代表列名
wonkju 2013-07-03
  • 打赏
  • 举报
回复
"是去掉列名两端的引号,这样在sql或c#里拼接字符串的时候就不用转义了,少了好多引号,不容易出错。" 我知道你的意思.不过.有时为了以防万一.就加 [] 因为如果表名和字段有空格.就更难找到错误了...
wonkju 2013-07-03
  • 打赏
  • 举报
回复
引用 33 楼 soaringbird 的回复:
[quote=引用 31 楼 king769147 的回复:]
'when ''电风扇'' then fieldName else null end) as [电风扇]' ''电风扇''两端的单引号是转义的 这一句要按照下面位置分割后再拼接 'when ''|电风扇|'' then |fieldName| else null end) as [|电风扇|]' 第一个分割位置的前面是半截字符串,你当然得补上一个单引号了,后面是一个字符串变量,就直接+了 其他位置的也一样。[/quote] 嗯...这个可以理解... 在C#中都可以单引号和双引号同时使用. 我试用一下双引号...关键字都全部不变色...
wonkju 2013-07-03
  • 打赏
  • 举报
回复
引用 34 楼 soaringbird 的回复:
[quote=引用 32 楼 king769147 的回复:] [quote=引用 30 楼 soaringbird 的回复:] [quote=引用 23 楼 king769147 的回复:] [quote=引用 20 楼 soaringbird 的回复:] 现在错误是在execute跟一行,跟引号啥的还八竿子打不着呢
先帮我解释吧...请问,你说可以去掉外围的单引号么?如果可以的话,可以减少麻烦... 但是我发现,如果直接去掉外围的单引号,我调用的 @groupCol 都说未声明...[/quote] 不是去掉整个sql字符串外围的单引号。是去掉列名两端的引号,这样在sql或c#里拼接字符串的时候就不用转义了,少了好多引号,不容易出错。当然用上[]更清晰。[/quote] 我的想法是说可以不,因为我见书上的静态的游标,都是两头都没有引号的,如:

Declare cur Cursor for select * from Production.Table
Open cur
Fetch Next cur from cur
所以我说是不是其实解析到引擎的时候,内部自动处理...[/quote] 静态的当然不用加了,但是你的表名都是传入的,所以要先拼接字符串。 另外,你这个好像也没必要用游标吧[/quote] 不用游标? 貌似比较难完成哦. 如果但是分组统计还好,但是还要计算每个商品的哈...应该比较难..
soaringbird 2013-07-03
  • 打赏
  • 举报
回复
引用 32 楼 king769147 的回复:
[quote=引用 30 楼 soaringbird 的回复:] [quote=引用 23 楼 king769147 的回复:] [quote=引用 20 楼 soaringbird 的回复:] 现在错误是在execute跟一行,跟引号啥的还八竿子打不着呢
先帮我解释吧...请问,你说可以去掉外围的单引号么?如果可以的话,可以减少麻烦... 但是我发现,如果直接去掉外围的单引号,我调用的 @groupCol 都说未声明...[/quote] 不是去掉整个sql字符串外围的单引号。是去掉列名两端的引号,这样在sql或c#里拼接字符串的时候就不用转义了,少了好多引号,不容易出错。当然用上[]更清晰。[/quote] 我的想法是说可以不,因为我见书上的静态的游标,都是两头都没有引号的,如:

Declare cur Cursor for select * from Production.Table
Open cur
Fetch Next cur from cur
所以我说是不是其实解析到引擎的时候,内部自动处理...[/quote] 静态的当然不用加了,但是你的表名都是传入的,所以要先拼接字符串。 另外,你这个好像也没必要用游标吧
soaringbird 2013-07-03
  • 打赏
  • 举报
回复
引用 31 楼 king769147 的回复:
'when ''电风扇'' then fieldName else null end) as [电风扇]' ''电风扇''两端的单引号是转义的 这一句要按照下面位置分割后再拼接 'when ''|电风扇|'' then |fieldName| else null end) as [|电风扇|]' 第一个分割位置的前面是半截字符串,你当然得补上一个单引号了,后面是一个字符串变量,就直接+了 其他位置的也一样。
wonkju 2013-07-03
  • 打赏
  • 举报
回复
引用 30 楼 soaringbird 的回复:
[quote=引用 23 楼 king769147 的回复:] [quote=引用 20 楼 soaringbird 的回复:] 现在错误是在execute跟一行,跟引号啥的还八竿子打不着呢
先帮我解释吧...请问,你说可以去掉外围的单引号么?如果可以的话,可以减少麻烦... 但是我发现,如果直接去掉外围的单引号,我调用的 @groupCol 都说未声明...[/quote] 不是去掉整个sql字符串外围的单引号。是去掉列名两端的引号,这样在sql或c#里拼接字符串的时候就不用转义了,少了好多引号,不容易出错。当然用上[]更清晰。[/quote] 我的想法是说可以不,因为我见书上的静态的游标,都是两头都没有引号的,如:

Declare cur Cursor for select * from Production.Table
Open cur
Fetch Next cur from cur
所以我说是不是其实解析到引擎的时候,内部自动处理...
wonkju 2013-07-03
  • 打赏
  • 举报
回复
引用 29 楼 soaringbird 的回复:
[quote=引用 21 楼 king769147 的回复:] [quote=引用 17 楼 soaringbird 的回复:] execute @SQL改成execute (@SQL)
擦...你好厉害... 对了...和我解释一下这里:
 when '''+@proColumn+''' then '+@staticCol+' else null
是什么意思么.... 麻烦了...今天就你说对了.. 这里我知道 单引号'可以转义 所以,两个单引号 ''表示一个单引号.但是这里有三个单引号,怎么像拼接又不拼接. 还有问你,execute @SQL改成execute (@SQL) 怎么一定要加括号?[/quote] 你复制的那一行换行了,when前面还有一个单引号呢。 ' when '''+@proColumn+''' then '+@staticCol+' else null End) as ['+@proColumn+']' 其实就是字符串常量加变量. 你其实想拼成的sql语句是 when '电风扇' then fieldName else null end) as [电风扇] 用字符串表示就需要转义字符串内部的单引号 'when ''电风扇'' then fieldName else null end) as [电风扇]' 电风扇和fieldName是变量传入进来的,所以这个字符串要拆分成几段: 1、'when ''' ,后面的三个单引号的前两个其实是一个单引号的转义表示。 2、电风扇,@proColumn传入 3、... 拼接时就是 'when ''' + @proColumn [/quote] 用字符串表示就需要转义字符串内部的单引号 'when ''电风扇'' then fieldName else null end) as [电风扇]' 这个我可以理解,但是 1、'when ''' ,后面的三个单引号的前两个其实是一个单引号的转义表示。 这个我不懂,是不是说错了. ' when '''+@proColumn+''' then '+@staticCol+' else null End) as ['+@proColumn+']' 是不是这样: 'when ''' 中,前面的第一个 单引号是紧跟着 when中的单引号,第二个是转义第三个? 有点不解你的说法...
soaringbird 2013-07-03
  • 打赏
  • 举报
回复
引用 23 楼 king769147 的回复:
[quote=引用 20 楼 soaringbird 的回复:] 现在错误是在execute跟一行,跟引号啥的还八竿子打不着呢
先帮我解释吧...请问,你说可以去掉外围的单引号么?如果可以的话,可以减少麻烦... 但是我发现,如果直接去掉外围的单引号,我调用的 @groupCol 都说未声明...[/quote] 不是去掉整个sql字符串外围的单引号。是去掉列名两端的引号,这样在sql或c#里拼接字符串的时候就不用转义了,少了好多引号,不容易出错。当然用上[]更清晰。
soaringbird 2013-07-03
  • 打赏
  • 举报
回复
引用 21 楼 king769147 的回复:
[quote=引用 17 楼 soaringbird 的回复:] execute @SQL改成execute (@SQL)
擦...你好厉害... 对了...和我解释一下这里:
 when '''+@proColumn+''' then '+@staticCol+' else null
是什么意思么.... 麻烦了...今天就你说对了.. 这里我知道 单引号'可以转义 所以,两个单引号 ''表示一个单引号.但是这里有三个单引号,怎么像拼接又不拼接. 还有问你,execute @SQL改成execute (@SQL) 怎么一定要加括号?[/quote] 你复制的那一行换行了,when前面还有一个单引号呢。 ' when '''+@proColumn+''' then '+@staticCol+' else null End) as ['+@proColumn+']' 其实就是字符串常量加变量. 你其实想拼成的sql语句是 when '电风扇' then fieldName else null end) as [电风扇] 用字符串表示就需要转义字符串内部的单引号 'when ''电风扇'' then fieldName else null end) as [电风扇]' 电风扇和fieldName是变量传入进来的,所以这个字符串要拆分成几段: 1、'when ''' ,后面的三个单引号的前两个其实是一个单引号的转义表示。 2、电风扇,@proColumn传入 3、... 拼接时就是 'when ''' + @proColumn
  • 打赏
  • 举报
回复
引用 27 楼 nice_fish 的回复:
[quote=引用 26 楼 king769147 的回复:] [quote=引用 24 楼 nice_fish 的回复:] [quote=引用 21 楼 king769147 的回复:] [quote=引用 17 楼 soaringbird 的回复:] execute @SQL改成execute (@SQL)
擦...你好厉害... 对了...和我解释一下这里:
 when '''+@proColumn+''' then '+@staticCol+' else null
是什么意思么.... 麻烦了...今天就你说对了.. 这里我知道 单引号'可以转义 所以,两个单引号 ''表示一个单引号.但是这里有三个单引号,怎么像拼接又不拼接. 还有问你,execute @SQL改成execute (@SQL) 怎么一定要加括号?[/quote] exec @sql 是执行存储过程了 exec (@sql) 是执行sql语句[/quote] 谢... 请问这是个语法么?我的意思是加括号是表示执行过程,不加就表示执行语句? csdn就是好...好心人多....[/quote] 是[/quote] 加括号执行语句。不加是过程或者其它,你可以去看看Execute的语法。
  • 打赏
  • 举报
回复
引用 26 楼 king769147 的回复:
[quote=引用 24 楼 nice_fish 的回复:] [quote=引用 21 楼 king769147 的回复:] [quote=引用 17 楼 soaringbird 的回复:] execute @SQL改成execute (@SQL)
擦...你好厉害... 对了...和我解释一下这里:
 when '''+@proColumn+''' then '+@staticCol+' else null
是什么意思么.... 麻烦了...今天就你说对了.. 这里我知道 单引号'可以转义 所以,两个单引号 ''表示一个单引号.但是这里有三个单引号,怎么像拼接又不拼接. 还有问你,execute @SQL改成execute (@SQL) 怎么一定要加括号?[/quote] exec @sql 是执行存储过程了 exec (@sql) 是执行sql语句[/quote] 谢... 请问这是个语法么?我的意思是加括号是表示执行过程,不加就表示执行语句? csdn就是好...好心人多....[/quote] 是
wonkju 2013-07-03
  • 打赏
  • 举报
回复
引用 24 楼 nice_fish 的回复:
[quote=引用 21 楼 king769147 的回复:] [quote=引用 17 楼 soaringbird 的回复:] execute @SQL改成execute (@SQL)
擦...你好厉害... 对了...和我解释一下这里:
 when '''+@proColumn+''' then '+@staticCol+' else null
是什么意思么.... 麻烦了...今天就你说对了.. 这里我知道 单引号'可以转义 所以,两个单引号 ''表示一个单引号.但是这里有三个单引号,怎么像拼接又不拼接. 还有问你,execute @SQL改成execute (@SQL) 怎么一定要加括号?[/quote] exec @sql 是执行存储过程了 exec (@sql) 是执行sql语句[/quote] 谢... 请问这是个语法么?我的意思是加括号是表示执行过程,不加就表示执行语句? csdn就是好...好心人多....
wonkju 2013-07-03
  • 打赏
  • 举报
回复
引用 22 楼 jiaoshiyao 的回复:
嘎嘎偶也遇到过这种问题 表示没有办法 如果你的存储过程的sql语句是动态的话 偶只能说 实在不好意思啦
额...你说,可以去掉外围的单引号么?但是我直接去掉的话,引用 创建存储中的变量如,@groupCol都说未声明. 我见在书上有例子都是两边都不加声明引号,但是书上的例子游标都是静态的...
  • 打赏
  • 举报
回复
引用 21 楼 king769147 的回复:
[quote=引用 17 楼 soaringbird 的回复:] execute @SQL改成execute (@SQL)
擦...你好厉害... 对了...和我解释一下这里:
 when '''+@proColumn+''' then '+@staticCol+' else null
是什么意思么.... 麻烦了...今天就你说对了.. 这里我知道 单引号'可以转义 所以,两个单引号 ''表示一个单引号.但是这里有三个单引号,怎么像拼接又不拼接. 还有问你,execute @SQL改成execute (@SQL) 怎么一定要加括号?[/quote] exec @sql 是执行存储过程了 exec (@sql) 是执行sql语句
wonkju 2013-07-03
  • 打赏
  • 举报
回复
引用 20 楼 soaringbird 的回复:
现在错误是在execute跟一行,跟引号啥的还八竿子打不着呢
先帮我解释吧...请问,你说可以去掉外围的单引号么?如果可以的话,可以减少麻烦... 但是我发现,如果直接去掉外围的单引号,我调用的 @groupCol 都说未声明...
jiaoshiyao 2013-07-03
  • 打赏
  • 举报
回复
嘎嘎偶也遇到过这种问题 表示没有办法 如果你的存储过程的sql语句是动态的话 偶只能说 实在不好意思啦
wonkju 2013-07-03
  • 打赏
  • 举报
回复
引用 17 楼 soaringbird 的回复:
execute @SQL改成execute (@SQL)
擦...你好厉害... 对了...和我解释一下这里:
 when '''+@proColumn+''' then '+@staticCol+' else null
是什么意思么.... 麻烦了...今天就你说对了.. 这里我知道 单引号'可以转义 所以,两个单引号 ''表示一个单引号.但是这里有三个单引号,怎么像拼接又不拼接. 还有问你,execute @SQL改成execute (@SQL) 怎么一定要加括号?
soaringbird 2013-07-03
  • 打赏
  • 举报
回复
现在错误是在execute跟一行,跟引号啥的还八竿子打不着呢
soaringbird 2013-07-03
  • 打赏
  • 举报
回复
as 后面的列名还是要的
加载更多回复(18)

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧