真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

sqlserver116,sql1116n

SQL查詢語(yǔ)句的問(wèn)題

樓主的語(yǔ)句本來(lái)就運(yùn)行不了,上邊那個(gè)瞎復(fù)制,都不運(yùn)行一遍發(fā)什么發(fā)。oracle和sqlserver下運(yùn)行語(yǔ)句如下:

成都創(chuàng)新互聯(lián)公司:于2013年創(chuàng)立為各行業(yè)開(kāi)拓出企業(yè)自己的“網(wǎng)站建設(shè)”服務(wù),為1000多家公司企業(yè)提供了專業(yè)的網(wǎng)站制作、網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)和網(wǎng)站推廣服務(wù), 按需定制由設(shè)計(jì)師親自精心設(shè)計(jì),設(shè)計(jì)的效果完全按照客戶的要求,并適當(dāng)?shù)奶岢龊侠淼慕ㄗh,擁有的視覺(jué)效果,策劃師分析客戶的同行競(jìng)爭(zhēng)對(duì)手,根據(jù)客戶的實(shí)際情況給出合理的網(wǎng)站構(gòu)架,制作客戶同行業(yè)具有領(lǐng)先地位的。

select?a.ticket_id,a.txn_station,b.txn_station?from?

(select?row_number()?over?(partition?by?ticket_id?order?by?txn_time)?rn,subway.*?from?subway)?a,

(select?row_number()?over?(partition?by?ticket_id?order?by?txn_time)?rn,subway.*?from?subway)?b

where?a.ticket_id=b.ticket_id?and?a.trans_code=0?and?b.trans_code=1?and?a.txn_stationb.txn_station?and?a.rn=b.rn-1

order?by?a.ticket_id

結(jié)果:

其他數(shù)據(jù)庫(kù)另外說(shuō)明

sybase數(shù)據(jù)庫(kù)遷移sqlserver2000方法

簡(jiǎn)介

我最近參與了將一個(gè)Sybase數(shù)據(jù)庫(kù)移植到MicrosoftSQLServer

2000上的項(xiàng)目,我在這一項(xiàng)目上獲得的經(jīng)驗(yàn),將對(duì)Sybase數(shù)據(jù)庫(kù)管理員把Sybase數(shù)據(jù)庫(kù)移植到SQLServer2000平臺(tái)上有一定的幫助。

盡管二者之間的一些差別是相當(dāng)大的,例如Sybase數(shù)據(jù)庫(kù)管理系統(tǒng)中的存儲(chǔ)過(guò)程在SQL

Server就不能被編譯,而其它差別則不太大。在完成這一轉(zhuǎn)換前,對(duì)腳本文件和存儲(chǔ)過(guò)程中編程邏輯的行為和結(jié)果進(jìn)行測(cè)試是很有必要的。

在下面的部分中,我們將討論這二種數(shù)據(jù)庫(kù)系統(tǒng)之間的一些主要的不同點(diǎn),在移植的規(guī)劃階段,我們必須仔細(xì)研究這些區(qū)別。

數(shù)據(jù)兼容模式

對(duì)SQLServer2000和Sybase之間的一些兼容性差別的一個(gè)臨時(shí)性解決方案是改變SQL

Server中的數(shù)據(jù)庫(kù)兼容性級(jí)別,使之與Sybase相符。為此,我們可以使用sp_dbcmptlevel存儲(chǔ)過(guò)程。

下面表中的語(yǔ)句和結(jié)果顯示出不同版本數(shù)據(jù)庫(kù)之間的差別:

(Untitled-1)

注意:

1、當(dāng)兼容性模式被設(shè)置為70時(shí),下面的詞匯不能被用作對(duì)象名和標(biāo)識(shí)符:BACKUP、DENY、PRECENT、RESTORE和TOP。

2、當(dāng)兼容性模式被設(shè)置為65時(shí),下面的詞匯不能被用作對(duì)象名和標(biāo)識(shí)符:AUTHORIZATION、CASCASE、CROSS、 DISTRIBUTED、ESCAPE、FULL、INNER、JOIN、LEFT、OUTER、PRIVILEGES、RESTRICT、RIGHT、 SCHEMA和WORK。

下面是sp_dbcmptlevel的語(yǔ)法:

sp_dbcmptlevel[[@dbname=]name][,[@new_cmptlevel=]version]

@dbname是用于檢查和改變兼容性水平的數(shù)據(jù)庫(kù)名字。

@new_cmptlevel決定數(shù)據(jù)庫(kù)被設(shè)置的兼容性水平(將它設(shè)置為70、65、60,缺省值為NULL)。

例如:

sp_dbcmptlevelpubs

這一行代碼返回下面的結(jié)果:

Thecurrentcompatibilitylevelis70.(當(dāng)前的兼容性級(jí)別為70。)

現(xiàn)在我們來(lái)看一下另外一個(gè)例子:

sp_dbcmptlevelpubs,65

它返回如下的結(jié)果:

DBCCexecutioncompleted.(DBCC執(zhí)行結(jié)束。)

果DBCC打印出錯(cuò)誤信息,則需要與系統(tǒng)管理員聯(lián)系。我們可以使用rerunsp_dbcmptlevel驗(yàn)證pubs數(shù)據(jù)庫(kù)是否修改得正確:

sp_dbcmptlevelpubs

它返回下面的結(jié)果:

Thecurrentcompatibilitylevelis65(當(dāng)前的兼容性級(jí)別為65。)

除了上面的例子外,兼容性級(jí)別的差別還擴(kuò)展到了保留字。Sybase和SQL

Server都有許多不能被用作數(shù)據(jù)庫(kù)中對(duì)象名字的的保留字,二種產(chǎn)品的保留字相似,但并不完全相同。

由于能夠在Sybase中使用的對(duì)象可能不能在SQLServer中使用,這一問(wèn)題使得由Sybase向SQL

Server的移植憑添了許多困難。下面是在SQL

Server中是保留字,而在Sybase中不是保留字的詞匯清單。

注意:名字為下列清單中詞匯的Sybase數(shù)據(jù)庫(kù)中的對(duì)象在移植到SQL

Server數(shù)據(jù)庫(kù)時(shí)必須換為其它名字。

BACKUPCOLUMNCOMMITTEDCONTAINSCONTAINSTABLE

CROSSCURRENT_DATE

CURRENT_TIMECURRENT_TIMESTAMPCURRENT_USER

DENYDISTRIBUTEDFILEFLOPPY

FREETEXT

FREETEXTTABLEFULLIDENTITYCOLINNERJOIN

事務(wù)管理模式

SybaseSQLServer

Setchained[on:off]Setimplicit_transactions

[on:off]

在Sybase中使用下面的代碼判斷事務(wù)模式:

SELECT@@tranchained

GO

下面是可能返回的結(jié)果:

0表明使用的是非鏈鎖式事務(wù)模式

1表明連接運(yùn)行在鏈鎖模式下

在SQLServer中使用下面的代碼判斷事務(wù)模式:

IF(@@options2)0

PRINT

on

ELSE

PRINToff

下面是可能的返回結(jié)果:

0off

0on

隔離水平

在一個(gè)關(guān)系數(shù)據(jù)庫(kù)這樣的多線程應(yīng)用軟件中,數(shù)據(jù)庫(kù)引擎對(duì)運(yùn)行的進(jìn)程間的數(shù)據(jù)是如何被隔離的管理是非常重要的,在表示隔離水平時(shí),Sybase和SQL

Server的語(yǔ)法是不同的。下面的表格表明了Sybase和SQLServer在表示隔離水平時(shí)的差別。

SybaseSQL

Server

0READUNCOMMITTED

1READCOMMITTED

2REPEATABLEREAD

3

SERIALIZABLE

游標(biāo)語(yǔ)法

二種產(chǎn)品中存儲(chǔ)過(guò)程的創(chuàng)建和執(zhí)行基本相似,但在移植時(shí),游標(biāo)語(yǔ)句中的一些例外是我們應(yīng)當(dāng)注意的。下面是一個(gè)例子:

CREATEPROCEDUREsql_cursorAS

DECLARE@lnamechar(20),@fname

char(20)

DECLAREmycursorCURSORFOR

SELECTau_lname,au_fnameFROM

authors

OPENmycursor

FETCHFROMmycursorINTO@lname,@fname

WHILE@@

FETCH_STATUS=0

/*Sybase數(shù)據(jù)庫(kù)使用@SQLSTATUS而不是@@FETCH_STATUS*/

BEGIN

FETCHFROMmycursorINTO@lname,@fname

/*

**

這里應(yīng)當(dāng)是一些業(yè)務(wù)邏輯

*/

END

CLOSEmycursor

DEALLOCATE/*

Sybase數(shù)據(jù)庫(kù)在這里需要CURSOR這個(gè)詞*/mycursor

SybaseSQLServer

Fetch命令執(zhí)行成功00

Fetch命令執(zhí)行失敗1-2

沒(méi)有可存取的記錄了2

-1

退回觸發(fā)器

SQLServer中不存在這個(gè)命令,因此在向SQL

Server移植時(shí),使用了ROLLBACKTRIGGER命令的Sybase存儲(chǔ)過(guò)程必須被進(jìn)行修改。在修改帶有觸發(fā)器的數(shù)據(jù)庫(kù)表中的數(shù)據(jù)時(shí),使用ROLLBACK

TRIGGER命令容易引起誤解,一個(gè)ROLLBACK

TRIGGER命令只退回觸發(fā)器以及觸發(fā)觸發(fā)器的數(shù)據(jù)修改,如果已經(jīng)被提交了,則事務(wù)的其它部分會(huì)繼續(xù),被寫(xiě)到數(shù)據(jù)庫(kù)中。因此,事務(wù)中的所有語(yǔ)句可能沒(méi)有被成功地完成,但數(shù)據(jù)已經(jīng)被提交了。

下面是Sybase數(shù)據(jù)庫(kù)中一個(gè)使用ROLLBACK

TRIGGER的樣例觸發(fā)器:

CREATETABLEtable1(aint,bint)

GO

CREATETRIGGERtrigger1ontable1

FORINSERT

AS

IFEXISTS(SELECT1FROMinsertedWHEREa=

100)

BEGIN

ROLLBACKTRIGGERwithRAISERROR50000Invalidvalueforcolumn

a

END

INSERTINTOtable2

SELECTa,GETDATE()from

inserted

RETURN

GO

在上面的代碼中,除非a=100,則所有插入table1的數(shù)據(jù)也被作為審計(jì)行插入table2中,如果a=100,ROLLBACK

TRIGGER命令被觸發(fā),而INSERT命令沒(méi)有被觸發(fā),批命令的其它部分繼續(xù)執(zhí)行,這時(shí)會(huì)出現(xiàn)錯(cuò)誤信息,表明在一個(gè)INSERT命令中出現(xiàn)了錯(cuò)誤。下面是所有的INSERT命令:

BEGINTRAN

INSERTINTOtable1VALUES(1,1)

INSERTINTOtable1VALUES

(100,2)

INSERTINTOtable1VALUES(3,3)

GO

SELECT*FROMtable1

在執(zhí)行這些命令后,table1和table2二個(gè)數(shù)據(jù)庫(kù)表將各有2個(gè)記錄,Table1表中的值為1,1以及3,3,由于ROLLBACK

TRIGGER命令,第二個(gè)INSERT命令沒(méi)有執(zhí)行;Table2表中的值為1,(當(dāng)前日期)以及3,(當(dāng)前日期),由于當(dāng)a=100時(shí)ROLLBACK

TRIGGER被觸發(fā),觸發(fā)器中的所有處理被中止,100沒(méi)有被插入到Table2表中。

在SQL

Server中模擬這一操作需要更多的代碼,外部的事務(wù)必須與保存點(diǎn)同時(shí)使用,如下所示:

CREATEtrigger1ontable1FOR

INSERT

AS

SAVETRANtrigger1

IFEXISTS(SELECT*FROMinsertedWHEREa

=100)

BEGIN

ROLLBACKTRANtrigger1

RAISERROR50000

ROLLBACK

END

INSERTINTOtable2

SELECTa,GETDATE()FROM

inserted

GO

這一觸發(fā)器以一個(gè)存儲(chǔ)點(diǎn)開(kāi)始,ROLLBACKTRANSACTION只退回觸發(fā)邏輯,而不是整個(gè)事務(wù)(規(guī)模要小于Sybases數(shù)據(jù)庫(kù)中的ROLLBACK

TRIGGER語(yǔ)句。對(duì)批命令的修改如下:

BEGINTRAN

SAVETRANsave1

INSERTINTOtable1

VALUES(1,1)

IF@@error=50000

ROLLBACKTRANsave1

SAVETRAN

save2

INSERTINTOtable1VALUES(100,1)

IF@@error=50000

ROLLBACK

TRANsave2

SAVETRANsave3

INSERTINTOtable1VALUES(3,3)

IF@@error

=50000

ROLLBACKTRANsave3

COMMITTRAN

我們可以發(fā)現(xiàn),改變不可謂不大。由于ROLLBACKTRIGGER命令能夠使任何批命令不能成功執(zhí)行,因此在移植的SQL

Server存儲(chǔ)過(guò)程代碼中必須包括另外的邏輯,根據(jù)ROLLBACK

TRIGGER的使用,這可能是一個(gè)艱巨而必要的任務(wù),沒(méi)有什么捷徑可走。如果在移植后所有的ROLLBACKTRIGGER命令被改變?yōu)镽OLLBACK

TRANSACTION,觸發(fā)器的執(zhí)行也會(huì)發(fā)生變化,因此我們應(yīng)當(dāng)十分小心。

命令優(yōu)化

SQL

Server能夠?qū)ELECT、INSERT、UPDATE和DELETE命令進(jìn)行優(yōu)化,Sybase數(shù)據(jù)庫(kù)則只支持對(duì)SELECT命令進(jìn)行優(yōu)化。下面是SQL

Server和Sybase在GUI方面的對(duì)比:

SybaseSQL

Server

使用被稱作SHOWPLAN的基于文本的查詢分析工具使用Query

Analyzer。

在ISQL中啟動(dòng)SHOWPLAN的命令按鈕多QueryAnalyzer中啟動(dòng)SHOWPLAN_ALL或

SHOWPLAN_TEXT的命令

SETSHOWPLANONSETSHOWPLAN_ALL

GOGO

臨時(shí)數(shù)據(jù)庫(kù)表的名字

表名字的類型 最大長(zhǎng)度

SQLServer表名字 128

SQL

Server臨時(shí)表名字 116

Sybase表名字 30

Sybase臨時(shí)表名字 13

數(shù)據(jù)類型

數(shù)據(jù)類型SybaseSQLServer

char(n)2558000

varchar(n)255

8000

nchar(n)2554000

nvarchar(n)2554000

binary255

8000

varbinary2558000

注意:

1)SQL

Server中的bit類型數(shù)據(jù)的值可以被設(shè)置為0、1或NULL。

2)Sybase中的bit類型數(shù)據(jù)的值不可以被設(shè)置為NULL。

同一性列

SybaseSQLServer

Numeric(x,0)Tinyint,smallint,int,decimal(x,0)or

numeric(x,0)

打印語(yǔ)法

在進(jìn)行移植時(shí),所有使用替換語(yǔ)法的打印語(yǔ)句必須被改變?yōu)镽AISERROR語(yǔ)句。

結(jié)論

將Sybase數(shù)據(jù)庫(kù)轉(zhuǎn)換為SQL

Server數(shù)據(jù)庫(kù)并非是不可能的,但二種產(chǎn)品之間存在許多差異,在轉(zhuǎn)換時(shí)需要加以解決。根據(jù)應(yīng)用程序的規(guī)模,這種轉(zhuǎn)換可能需要大量的時(shí)間。盡管無(wú)需重新編寫(xiě)所有的應(yīng)用程序,但需要完成的工作并不少。

我目前還沒(méi)有發(fā)現(xiàn)這二種數(shù)據(jù)庫(kù)間轉(zhuǎn)換的更簡(jiǎn)單的方法。由于二種產(chǎn)品在許多方面都非常相似,我們非常容易成功地將Sybase數(shù)據(jù)庫(kù)轉(zhuǎn)換為SQL

Server數(shù)據(jù)。

sqlserver怎么建臨時(shí)表

網(wǎng)上其實(shí)很多相關(guān)文章,你可以搜一下,并不一定需要在這里提問(wèn)。

轉(zhuǎn)帖一篇給你吧

drop table #Tmp --刪除臨時(shí)表#Tmp

create table #Tmp --創(chuàng)建臨時(shí)表#Tmp

(

ID int IDENTITY (1,1) not null, --創(chuàng)建列ID,并且每次新增一條記錄就會(huì)加1

WokNo varchar(50),

primary key (ID) --定義ID為臨時(shí)表#Tmp的主鍵

);

Select * from #Tmp --查詢臨時(shí)表的數(shù)據(jù)

truncate table #Tmp --清空臨時(shí)表的所有數(shù)據(jù)和約束

相關(guān)例子:

Declare @Wokno Varchar(500) --用來(lái)記錄職工號(hào)

Declare @Str NVarchar(4000) --用來(lái)存放查詢語(yǔ)句

Declare @Count int --求出總記錄數(shù)

Declare @i int

Set @i = 0

Select @Count = Count(Distinct(Wokno)) from #Tmp

While @i @Count

Begin

Set @Str = 'Select top 1 @Wokno = WokNo from #Tmp Where id not in (Select top ' + Str(@i) + 'id from #Tmp)'

Exec Sp_ExecuteSql @Str,N'@WokNo Varchar(500) OutPut',@WokNo Output

Select @WokNo,@i --一行一行把職工號(hào)顯示出來(lái)

Set @i = @i + 1

End

臨時(shí)表

可以創(chuàng)建本地和全局臨時(shí)表。本地臨時(shí)表僅在當(dāng)前會(huì)話中可見(jiàn);全局臨時(shí)表在所有會(huì)話中都可見(jiàn)。

本地臨時(shí)表的名稱前面有一個(gè)編號(hào)符 (#table_name),而全局臨時(shí)表的名稱前面有兩個(gè)編號(hào)符 (##table_name)。

SQL 語(yǔ)句使用 CREATE TABLE 語(yǔ)句中為 table_name 指定的名稱引用臨時(shí)表:

CREATE TABLE #MyTempTable (cola INT PRIMARY KEY)

INSERT INTO #MyTempTable VALUES (1)

如果本地臨時(shí)表由存儲(chǔ)過(guò)程創(chuàng)建或由多個(gè)用戶同時(shí)執(zhí)行的應(yīng)用程序創(chuàng)建,則 SQL Server 必須能夠區(qū)分由不同用戶創(chuàng)建的表。為此,SQL

Server 在內(nèi)部為每個(gè)本地臨時(shí)表的表名追加一個(gè)數(shù)字后綴。存儲(chǔ)在 tempdb 數(shù)據(jù)庫(kù)的 sysobjects 表中的臨時(shí)表,其全名由

CREATE TABLE 語(yǔ)句中指定的表名和系統(tǒng)生成的數(shù)字后綴組成。為了允許追加后綴,為本地臨時(shí)表指定的表名 table_name 不能超過(guò)

116 個(gè)字符。

除非使用 DROP TABLE 語(yǔ)句顯式除去臨時(shí)表,否則臨時(shí)表將在退出其作用域時(shí)由系統(tǒng)自動(dòng)除去:

當(dāng)存儲(chǔ)過(guò)程完成時(shí),將自動(dòng)除去在存儲(chǔ)過(guò)程中創(chuàng)建的本地臨時(shí)表。由創(chuàng)建表的存儲(chǔ)過(guò)程執(zhí)行的所有嵌套存儲(chǔ)過(guò)程都可以引用此表。但調(diào)用創(chuàng)建此表的存儲(chǔ)過(guò)程的進(jìn)程無(wú)法引用此表。

所有其它本地臨時(shí)表在當(dāng)前會(huì)話結(jié)束時(shí)自動(dòng)除去。

全局臨時(shí)表在創(chuàng)建此表的會(huì)話結(jié)束且其它任務(wù)停止對(duì)其引用時(shí)自動(dòng)除去。任務(wù)與表之間的關(guān)聯(lián)只在單個(gè) Transact-SQL 語(yǔ)句的生存周期內(nèi)保持。換言之,當(dāng)創(chuàng)建全局臨時(shí)表的會(huì)話結(jié)束時(shí),最后一條引用此表的 Transact-SQL 語(yǔ)句完成后,將自動(dòng)除去此表。

存儲(chǔ)過(guò)程或觸發(fā)器中創(chuàng)建的本地臨時(shí)表與在調(diào)用存儲(chǔ)過(guò)程或觸發(fā)器之前創(chuàng)建的同名臨時(shí)表不同。如果查詢引用臨時(shí)表,而同時(shí)有兩個(gè)同名的臨時(shí)表,則不定義針對(duì)哪

個(gè)表解析該查詢。嵌套存儲(chǔ)過(guò)程同樣可以創(chuàng)建與調(diào)用它的存儲(chǔ)過(guò)程所創(chuàng)建的臨時(shí)表同名的臨時(shí)表。嵌套存儲(chǔ)過(guò)程中對(duì)表名的所有引用都被解釋為是針對(duì)該嵌套過(guò)程所

創(chuàng)建的表,例如:

CREATE PROCEDURE Test2

AS

CREATE TABLE #t(x INT PRIMARY KEY)

INSERT INTO #t VALUES (2)

SELECT Test2Col = x FROM #t

GO

CREATE PROCEDURE Test1

AS

CREATE TABLE #t(x INT PRIMARY KEY)

INSERT INTO #t VALUES (1)

SELECT Test1Col = x FROM #t

EXEC Test2

GO

CREATE TABLE #t(x INT PRIMARY KEY)

INSERT INTO #t VALUES (99)

GO

EXEC Test1

GO

下面是結(jié)果集:

(1 row(s) affected)

Test1Col

-----------

1

(1 row(s) affected)

Test2Col

-----------

2

當(dāng)創(chuàng)建本地或全局臨時(shí)表時(shí),CREATE TABLE 語(yǔ)法支持除 FOREIGN KEY 約束以外的其它所有約束定義。如果在臨時(shí)表中指定

FOREIGN KEY 約束,該語(yǔ)句將返回警告信息,指出此約束已被忽略,表仍會(huì)創(chuàng)建,但不具有 FOREIGN KEY 約束。在 FOREIGN

KEY 約束中不能引用臨時(shí)表。

考慮使用表變量而不使用臨時(shí)表。當(dāng)需要在臨時(shí)表上顯式地創(chuàng)建索引時(shí),或多個(gè)存儲(chǔ)過(guò)程或函數(shù)需要使用表值時(shí),臨時(shí)表很有用。通常,表變量提供更有效的查詢處理。


網(wǎng)站題目:sqlserver116,sql1116n
網(wǎng)站地址:http://weahome.cn/article/hdsgoe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部