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://ybzwz.com/article/dssjphj.html