sqlserver标识符,sql标识符定义规则
往sqlserver 中的一个表里面插入数据时,提示标识符无效
语句帖出来
成都创新互联公司主要从事网站设计、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务硚口,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
INSERT
INTO
tbl_SMSend@sms
(TryTimes,
SendTime,
SubTime,
SendType)
VALUES
('0',
to_date('2009-07-08','yyyy-mm-dd'),to_date('2009-07-08','yyyy-mm-dd'),
'1')
原因是因为,sqlserver与oracle中的函数不是全部通用,在oracle中插入日期型数据,需要将字符型的日期用to_date进行转换
SQLSERVER如何在生成临时表时改变标识符?
select [SNAME],IDENTITY(int,1,1) as sid into #tmp from [sInfo]
就可以了,那个标识符列不用插的
SQL中如何截取标识符前、标识符中间、标识符后的字段
几个概念:
A、标识符:是数据库对象的名称。
数据库对象的名称被看成是该对象的标识符。Microsoft® SQL Server™ 中的每一内容都可带有标识符。服务器、数据库和数据库对象(例如表、视图、列、索引、触发器、过程、约束、规则等)都有标识符。大多数对象要求带有标识符,但对有些对象(如约束)标识符是可选项。
B、保留关键字:是sql语言的语法。属于代码的范畴。
保留关键字是用来定义、操作和访问数据库。保留关键字是 SQL Server 使用的 Transact-SQL 语言语法的一部分,用于分析和理解 Transact-SQL 语句和批处理。尽管在 Transact-SQL 脚本中,使用 SQL Server 保留关键字作为标识符和对象名在语法上是可行的,但规定只能使用分隔标识符。
C、字符串:数据类型的一种,数据类型有整数型、字符串型等。属于数据的范畴。
每个列、局部变量、表达式和参数都有一个相关的数据类型。即属于某种数据类型。
D、通配符、转义符:这2个是跟字符串相关的概念。一般出现在字符串中。
比如 like ’dsd%‘ , dsd% 是字符串。%是通配符。这个语句的含义大家应该都知道,^_^。
使用转义符,可以把通配符改变成普通字符。2种方法:
1、[]是默认的转义符,里面的通配符(里面只能是通配符),都当做普通字符处理:
like ’dsd[%]‘,这时,%就是个普通字符了,查找条件就是要某个字段值完全等于 dsd% 。
2、用ESCAPE关键字定义转义符,
like ’dsd/%‘ ESCAPE ’/' 效果同 like ’dsd[%]‘
还有一种转义符情况:
大家知道,单引号一般可用来包含字符串,如果字符串中有单引号是普通字符,那么就同时有了2种意思的单引号,怎么区分呢?就要用2个单引号来转义为普通字符,如 like ‘ds''d’ ,其实就是指字符串:ds'd
后面提到的QUOTENAME函数,默认是用[]来做分隔符,如果字符串中有[],函数转换后,字符串中的[]就要用两个]]来转义,表明这个[]是个普通字符,与字符串前后的分隔符 [] 相区别。
步入正题,
标识符,分为:
一、常规标识符:符合常规标识符规则的标识符。
常规标识符规则如下:(参考sqlserver的联机帮助)
1、。。。。。
2、。。。。。
3、。。。。。
4、。。。。。
二、分隔标识符:包含在双引号 " 或者方括号 [ ] 内的标识符就是分隔标识符。
注意:双引号 " 或者方括号 [ ] 是分隔符。
在 Transact-SQL 语句中,对不符合常规标识符规则的标识符必须用双引号或方括号来分隔。符合标识符格式规则的标识符可以分隔,也可以不分隔。
1、当QUOTED_IDENTIFIER 为 ON 时,默认是on的。 SQL Server 遵循 SQL-92 规则:
双引号只能用于分隔标识符,不能用于分隔字符串。
为保持与现有应用程序的兼容性,SQL Server 并不完全强制该规则。如果字符串没有超过标识符的长度,则该字符串可包含在双引号内。但不建议这样做。
单引号必须用来包含字符串,不能用于分隔标识符。
如果字符串包含单引号,则需要在单引号前再增加一个单引号:
SELECT * FROM "My Table"
WHERE "Last Name" = 'O''Brien'
注意:"Last Name",你可以写成'Last Name'而不会报语法错误,是因为,sql认为是进行字符串的比较了,比如写成'Last Name'='Last Name',比较结果为真,表中的全部记录就被select出来了。而如果写成:WHERE "Last Name" = "O''Brien",即等号右边改成双引号,则会把O''Brien当成一个标识符(数据库对象),即当成一个字段名,运行时,会提示没有O''Brien列。 2、当 QUOTED_IDENTIFIER 为 OFF 时,对于双引号和单引号的使用,SQL Server 遵循如下规则:
引号不能用于分隔标识符,而是用括号作为分隔符。
单引号或双引号可用于包含字符串。
如果使用双引号,嵌入的单引号不需要用两个单引号来表示:
SELECT * FROM [My Table]
WHERE [Last Name] = "O'Brien"
常规标识符和分隔标识符包含的字符数必须在 1 到 128 之间
另外:
将标识符用作参数:(具体请参考联机帮助)
许多系统存储过程、函数和 DBCC 语句都把对象名当作参数。其中一些参数接受多部分对象名,另一些则只接受单部分名称。接受单部分对象名称还是多部分对象名称决定了 SQL Server 在内部如何分析和使用参数。 。。。。。。。
另外:
QUOTENAME函数:
msdn解释:返回带有分隔符的 Unicode 字符串,分隔符的加入可使输入的字符串成为有效的 Microsoft® SQL Server™ 分隔标识符。
以下示例接受字符串 abc[]def 并使用 [ 和 ] 字符来创建有效的 SQL Server 分隔标识符:
SELECT QUOTENAME('abc[]def')
下面是结果集:
[abc[]]def]
(1 row(s) affected)
注意,字符串"abc[]def"中的右括号有两个,用于表示转义符,转换成普通字符,与分隔符 [] 相区别。
解释:字符串 abc[]def 中的[]是当做普通字符,所以用 ] ] 来表示 ] 是个普通字符,即表明中间的 [] 就是个普通字符。
如果是:SELECT QUOTENAME('abc[]def' , '()' ) ,不用[]来做分隔符,那么结果是:
(abc[]def) ,就不用两个]] 来转义了,因为新的字符串中只有一种意思的[],即普通字符。
这是个通用的规则,比如字符串中含有单引号 ' 为普通字符串时,比如 :ds'd ,
like 语句就要改成:like ‘ds‘’d’,而不是: like 'ds'd' 。即2个单引号表示转义符,转换成普通单引号字符 ' 。
SqlServer怎么能让identity标识符在删除记录空缺后自动重排?
这个好像不能实现吧。自动增长列不会重新改变的。 你可以使用row_number来将它排序,不知道这样能否满足你的需求。如果你非要使用标识列,我提供两种方法可以做到,一:是将表整个表复制(除了标识列),重新加一个标识列。二:写一个触发器将后面的行移动上来但是两种效果都不是很好。
本文标题:sqlserver标识符,sql标识符定义规则
标题链接:http://hbruida.cn/article/dssjphj.html