《SQL中存储过程中SQL语句的单引号和双引号问题.pdf》由会员分享,可在线阅读,更多相关《SQL中存储过程中SQL语句的单引号和双引号问题.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、SQLSQL 中存储过程中中存储过程中 SQLSQL 语句的单引号和双引号问题语句的单引号和双引号问题(2)(2)关于 SQL 语句中的双引号、单引号和(1)先来看一个最简单的SQL 语句 Insert Into users(username) values(小王)大家来看一下,这是一个标准的SQL 语句,因为 username 是文本型字段,所以字段值两边要加双引号,表示小王是一个字符串。(2)可是在 ASP 中,我们通常这样写 strSql=Insert Into users(username) values(小王)此时, 前后的双引号表示中间是一个字符串。 而小王两边的单引号是因为发生了
2、引号嵌套,所以内层引号该为了单引号。(3)实际插入时,因为小王通常是从表单中获取的变量,不过因为变量不能直接写入字符串,必须通过连接符和字符串连接在一起,所以要写成如下形式: myusername=Request.Form(username) strSql=Insert Into users(username) values( & myusername & )很多人此时就糊涂了,为什么其中又有单引号,又有双引号啊。简单的看上面的式子,其实是由如下三部分组成的:字符串常数:Insert Into users(username) values(字符串变量:myusername字符串常数:)直接理解
3、上面的式子可能比较困难, 现在我们变量 myusername 的值代入就能看清楚了。假如 myusername=小王,代入: strSql=Insert Into users(username) values( & 小王 & )然后依次执行其中的连接运算符,结果为: strSql=Insert Into users(username) values(小王)这就是(2)中提到的正确的SQL 语句。 到此就能看清楚了: 式子中第 1、2 个双引号配套,表示这是一个字符串。第3、4 个双引号配套,也表示是一个字符串。而式子中的单引号就是文本型字段值小王前后的单引号。(4)上面只有一个字段,下面来看一
4、个有两个字段的情况: strSql=Insert Into users(username,password) values( & myusername & ,mypassword & )其中 myusername 和 mypassword 是变量。现在假如 myusername=小王,mypassword=123456,代入其中,结果为: strSql=Insert Into users(username,password) values( & 小王 & , &123456 & )依次执行连接运算,结果为: strSql=Insert Into users(username,password)
5、 values(小王,123456)(5)文本型字段值两边加引号,日期型两边加 #,数字、逻辑两边什么都不用加。如下面 age 是数字,submit_date 是日期型。 strSql=Insert Into users(username,password,age,submit_date) values( &myusername & , & mypassword & , & myage & ,# & mysubmit_date & #)注意这里根据字段的类型两边加上相应的符号,或者不加。假如myusername=小王,mypassword =123456,myage=20,mysubmit_d
6、ate=2004-4-1,代入其中,结果为: strSql=Insert Into users(username,password,age,submit_date) values( &小王 & , & 123456 & , & 20 & ,# & 2004-4-1 & #)这里的 20 很特殊, 运算时, 首先会自动转换为字符串, 因为这里参与运算的都是字符串。结果为: strSql=Insert Into users(username,password,age,submit_date) values( &小王 & , & 123456 & , & 20 & ,# & 2004-4-1 & #
7、)依次执行连接运算,结果strSql=Insert Into users(username,password,age,submit_date) values (小王,123456,20, #2004-4-1#)这正是我们需要的标准的SQL 语句。关于关于 InsertInsert 字符串字符串很多同学都在这个方面发生了问题, 其实主要是因为数据类型和变量在作怪。 下面我们就分别讲述,虽然说的是Insert 语句,但是Select、Update、Delete 语句都是一样的。假如有下述表格: mytabe字段 1 username字符串型(姓名)字段 2 age数字型(年龄)字段 3 birth
8、day日期型(生日)字段 4 marry布尔型(是否结婚,结婚为True,未结婚为 False)字段 5 leixing字符串型(类型) 1插入字符串型假如要插入一个名为张红的人,因为是字符串,所以Insert 语句中名字两边要加单撇号,如:strsql=“Insert into mytable(username) values(张红)”如果现在姓名是一个变量thename,则写成strsql=”Insert into mytable(username) values(” & thename & “)”这里 Insert into mytable(username) values(是张红前面的
9、部分,thename 是字符串变量,)是张红后面的部分。将thename 变量替换成张红,再用将三段连接起来,就变成了strsql=“Insert into mytable(username) values(张红)”。如果要插入两个字段,如姓名为“张红”,类型为“学生”strsql=“Insert into mytable(username,leixing) values(张红,学生)”如果现在姓名是一个变量thename,类型也是一个变量 thetype,则写成:strsql=”Insert into mytable(username,leixing)values(”&thename&“,”
10、&thetype &“)”和第一个例子一样, 将 thename 和 thetype 替换后,再用连接符,就连接成和上面一样的字符串了。2插入数字型假如插入一个年龄为12 的记录,要注意数字不用加单撇号:strsql=“Insert into mytable(age) values(12)”如果现在年龄是一个变量theage,则为:strsql=“Insert into mytable(age) values(“ & theage & “)”这里 Insert into mytable(age) values(是 12 前面的部分,theage 是年龄变量,)是12 后面部分。 将 theag
11、e 替换, 再用连接符将三部分连接起来, 就变为了和上面一样的字符。3插入日期型日期型和字符串型类似,但是要将单撇号替换为#号。(不过,Access 数据库中用单撇号也可以)strsql=“Insert into mytable(birthday) values(#1980-10-1#)”如果换成日期变量 thedatestrsql=“Insert into mytable(birthday) values(#” & thedate & “#)” 4插入布尔型布尔型和数字型类似:只不过只有两个值 True 和 False,如:strsql=“Insert into mytable(marry)
12、 values(True)”如果换成布尔变量 themarrystrsql=“Insert into mytable(birthday) values(” & themarry& “)” 5综合示例插入一个姓名为张红,年龄为12,出生日期为 1970-6-8 的记录strsql=“Insert into mytable(username,age,birthday) values(张红,12,#1970-6-8#)”仔细注意上式:因为姓名是字符串,所以张红两边加了单撇号;年龄是数字, 所以没有加单撇号。如果换成字符串变量 thename、数字变量 theage 和日期变量 thebirthday
13、,则变为:strsql=“Insert into mytable(username,age,birthday)values(”& thename&“,”& theage&“,#”& thebirthday & “#)”总之,替换变量,再连接后要完成和上边一样的字符串。 6小窍门(1)插入字符串型把下面的语句题换成变量的写法:strsql=“Insert into mytable(username) values(张红)”第一步:先把张红抹去,在原位置加两个引号strsql=“Insert into mytable(username) values(”“)”第二步:在中间添加两个连接符strsq
14、l=“Insert into mytable(username) values(”& &“)”第三步:把变量写在两个连接符之间strsql=“Insert into mytable(username) values(”& thename &“)”(2)插入数值/布尔型把下面的语句题换成变量的写法:strsql=“Insert into mytable(age) values(12)”第一步:先把 12 抹去,在原位置加两个引号 strsql=“Insert into mytable(username) values(”“)”第二步:在中间添加两个连接符strsql=“Insert into m
15、ytable(username) values(”& &“)”第三步:把变量写在两个连接符之间strsql=“Insert into mytable(username) values(”& theage &“)”(3)插入日期型把下面的语句题换成变量的写法:strsql=“Insert into mytable(birthday) values(#1980-10-1#)”第一步:先把 1980-10-1 抹去,在原位置加两个引号strsql=“Insert into mytable(username) values(#”“#)”第二步:在中间添加两个连接符strsql=“Insert into mytable(username) values(#”& &“#)”第三步:把变量写在两个连接符之间strsql=“Insert into mytable(username) values(#”& thedate &“#)”