Ⅰ sql 關於as語句錯誤
如果你是想事項把STUDENTS 這張表SEX=女的查出來放另張表的話,那就是下面的寫法: 在沒有表GIRL 的情況下用,sql會自己創建的.欄位的類型大小跟STUDENTS 是一樣的
SELECT SNO, SNAME, AGE into GIRL
FROM STUDENTS
WHERE SEX=' 女 ';
如果是要往已經有的表GIRL 插入數據的話:
應該是:insert into GIRL (SNO, SNAME, AGE) SELECT SNO, SNAME, AGE
FROM STUDENTS
WHERE SEX=' 女 ';
你那樣寫的語法是錯誤的
Ⅱ 剛學SQL 學到關於數據查詢 老師布置作業`查詢不及格男學生和女學生的人數`
select s.性別,count(s.*)
from s,sc
where s.學員ID=sc.學員ID and sc.分數<及格分數
group by s.性別
Ⅲ SQL計算語句請求問題
使用下面寫法就行了,其實把男生數和女生數的case when 相比就行了。
SELECT Convert(VARCHAR(100), Zixrq, 23) AS 日期,
SUM(CASE WHEN Xingb = '女' THEN 1 ELSE 0 END) AS 女生數,
SUM(CASE WHEN Xingb = '男' THEN 1 ELSE 0 END) AS 男生數,
SUM(CASE WHEN Xingb = '男' THEN 1 ELSE 0 END) / SUM(CASE WHEN Xingb = '女' THEN 1 ELSE 0 END) AS 男女比例
FROM Huiyuan
WHERE Zixrq >= '2012-11-23'
AND Zixrq <= '2012-12-3'
GROUP BY Convert(VARCHAR(100), Zixrq, 23)
帝狼神我好像答過你的問題
Ⅳ sql語句查詢數據問題!
這是個sql語句的基本學習手冊
你可以自己查一下
SQL語句學習手冊實例版
表操作
例 1 對於表的教學管理資料庫中的表 STUDENTS ,可以定義如下:
CREATE TABLE STUDENTS
(SNO NUMERIC (6, 0) NOT NULL
SNAME CHAR (8) NOT NULL
AGE NUMERIC(3,0)
SEX CHAR(2)
BPLACE CHAR(20)
PRIMARY KEY(SNO))
例 2 對於表的教學管理資料庫中的表 ENROLLS ,可以定義如下:
CREATE TABLE ENROLLS
(SNO NUMERIC(6,0) NOT NULL
CNO CHAR(4) NOT NULL
GRADE INT
PRIMARY KEY(SNO,CNO)
FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO)
FOREIGN KEY(CNO) REFERENCES COURSES(CNO)
CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100)))
例 3 根據表的 STUDENTS 表,建立一個只包含學號、姓名、年齡的女學生表。
CREATE TABLE GIRL
AS SELECT SNO, SNAME, AGE
FROM STUDENTS
WHERE SEX=' 女 ';
例 4 刪除教師表 TEACHER 。
DROP TABLE TEACHER
例 5 在教師表中增加住址列。
ALTER TABLE TEACHERS
ADD (ADDR CHAR(50))
例 6 把 STUDENTS 表中的 BPLACE 列刪除,並且把引用 BPLACE 列的所有視圖和約束也一起刪除。
ALTER TABLE STUDENTS
DROP BPLACE CASCADE
例 7 補充定義 ENROLLS 表的主關鍵字。
ALTER TABLE ENROLLS
ADD PRIMARY KEY (SNO,CNO) ;
視圖操作(虛表)
例 9 建立一個只包括教師號、姓名和年齡的視圖 FACULTY 。 ( 在視圖定義中不能包含 ORDER BY 子句 )
CREATE VIEW FACULTY
AS SELECT TNO, TNAME, AGE
FROM TEACHERS
例 10 從學生表、課程表和選課表中產生一個視圖 GRADE_TABLE , 它包括學生姓名、課程名和成績。
CREATE VIEW GRADE_TABLE
AS SELECT SNAME,CNAME,GRADE
FROM STUDENTS,COURSES,ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO AND
COURSES.CNO=ENROLLS.CNO
例 11 刪除視圖 GRADE_TABLE
DROP VIEW GRADE_TABLE RESTRICT
索引操作
例 12 在學生表中按學號建立索引。
CREATE UNIQUE INDEX ST
ON STUDENTS (SNO,ASC)
例 13 刪除按學號所建立的索引。
DROP INDEX ST
資料庫模式操作
例 14 創建一個簡易教學資料庫的資料庫模式 TEACHING_DB ,屬主為 ZHANG 。
CREATE SCHEMA TEACHING_DB AUTHRIZATION ZHANG
例 15 刪除簡易教學資料庫模式 TEACHING_DB 。(( 1 )選用 CASCADE ,即當刪除資料庫模式時,則本資料庫模式和其下屬的基本表、視圖、索引等全部被刪除。( 2 )選用 RESTRICT ,即本資料庫模式下屬的基本表、視圖、索引等事先已清除,才能刪除本資料庫模式,否則拒絕刪除。)
DROP SCHEMA TEACHING_DB CASCADE
單表操作
例 16 找出 3 個學分的課程號和課程名。
SELECT CNO, CNAME
FROM COURSES
WHERE CREDIT = 3
例 17 查詢年齡大於 22 歲的學生情況。
SELECT *
FROM STUDENTS
WHERE AGE > 22
例 18 找出籍貫為河北的男生的姓名和年齡。
SELECT SNAME, AGE
FROM STUDENTS
WHERE BPLACE = ' 河北 ' AND SEX = ' 男 '
例 19 找出年齡在 20 ~ 23 歲之間的學生的學號、姓名和年齡,並按年齡升序排序。 (ASC (升序)或 DESC (降序)聲明排序的方式,預設為升序。 )
SELECT SNO, SNAME, AGE
FROM STUDENTS
WHERE AGE BETWEEN 20 AND 23
ORDER BY AGE
例 20 找出年齡小於 23 歲、籍貫是湖南或湖北的學生的姓名和性別。(條件比較運算符=、< 和邏輯運算符 AND (與),此外還可以使用的運算符有:>(大於)、>=(大於等於)、<=(小於等於)、<>(不等於)、 NOT (非)、 OR (或)等。
謂詞 LIKE 只能與字元串聯用,常常是 「 <列名> LIKE pattern」 的格式。特殊字元 「_」 和 「%」 作為通配符。
謂詞 IN 表示指定的屬性應與後面的集合(括弧中的值集或某個查詢子句的結果)中的某個值相匹配,實際上是一系列的 OR (或)的縮寫。謂詞 NOT IN 表示指定的屬性不與後面的集合中的某個值相匹配。
謂詞 BETWEEN 是 「 包含於 … 之中 」 的意思。)
SELECT SNAME, SEX
FROM STUDENTS
WHERE AGE < 23 AND BPLACE LIKE' 湖% '
或
SELECT SNAME, SEX
FROM STUDENTS
WHERE AGE < 23 AND BPLACE IN ( ' 湖南 ' , ' 湖北 ' )
例 22 找出學生表中籍貫是空值的學生的姓名和性別。(在 SQL 中不能使用條件:<列名>= NULL 。在 SQL 中只有一個特殊的查詢條件允許查詢 NULL 值:)
SELECT SNAME, SEX
FROM STUDENTS
WHERE BPLACE IS NULL
多表操作
例 23 找出成績為 95 分的學生的姓名。(子查詢)
SELECT SNAME
FROM STUDENTS
WHERE SNO =
(SELECT SNO
FROM ENROLLS
WHERE GRADE = 95)
例 24 找出成績在 90 分以上的學生的姓名。
SELECT SNAME
FROM STUDENTS
WHERE SNO IN
(SELECT SNO
FROM ENROLLS
WHERE GRADE > 90)
或
SELECT SNAME
FROM STUDENTS
WHERE SNO = ANY
(SELECT SNO
FROM ENROLLS
WHERE GRADE > 90)
例 25 查詢全部學生的學生名和所學課程號及成績。(連接查詢)
SELECT SNAME, CNO, GRADE
FROM STUDENTS, ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO
例 26 找出籍貫為山西或河北,成績為 90 分以上的學生的姓名、籍貫和成績。(當構造多表連接查詢命令時,必須遵循兩條規則。第一,連接條件數正好比表數少 1 (若有三個表,就有兩個連接條件 ) ;第二,若一個表中的主關鍵字是由多個列組成,則對此主關鍵字中的每一個列都要有一個連接條件(也有少數例外情況))
SELECT SNAME, BPLACE, GRADE
FROM STUDENTS, ENROLLS
WHERE BPLACE IN (『 山西 ' , 『 河北 ') AND GRADE >= 90 AND STUDENTS.SNO=ENROLLS.SNO
例 28 查出課程成績在 80 分以上的女學生的姓名、課程名和成績。( FROM 子句中的子查詢)
SELECT SNAME,CNAME, GRADE
FROM (SELECT SNAME, CNAME , GRADE
FROM STUDENTS, ENROLLS,COURSES
WHERE SEX = ' 女 ')
AS TEMP (SNAME, CNAME,GRADE)
WHERE GRADE > 80
表達式與函數的使用
例 29 查詢各課程的學時數。(算術表達式由算術運算符+、-、 * 、/與列名或數值常量所組成。)
SELECT CNAME,COURSE_TIME = CREDIT*16
FROM COURSES
例 30 找出教師的最小年齡。(內部函數: SQL 標准中只使用 COUNT 、 SUM 、 AVG 、 MAX 、 MIN 函數,稱之為聚集函數( Set Function )。 COUNT 函數的結果是該列統計值的總數目, SUM 函數求該列統計值之和, AVG 函數求該列統計值之平均值, MAX 函數求該列最大值, MIN 函數求該列最小值。)
SELECT MIN(AGE)
FROM TEACHERS
例 31 統計年齡小於等於 22 歲的學生人數。(統計)
SELECT COUNT(*)
FROM STUDENTS
WHERE AGE < = 22
例 32 找出學生的平均成績和所學課程門數。
SELECT SNO, AVG(GRADE), COURSES = COUNT(*)
FROM ENROLLS
GROUP BY SNO
例 34 找出年齡超過平均年齡的學生姓名。
SELECT SNAME
FROM STUDENTS
WHERE AGE >
(SELECT AVG(AGE)
FROM STUDENTS)
例 35 找出各課程的平均成績,按課程號分組,且只選擇學生超過 3 人的課程的成績。( GROUP BY 與 HAVING
GROUP BY 子句把一個表按某一指定列(或一些列)上的值相等的原則分組,然後再對每組數據進行規定的操作。
GROUP BY 子句總是跟在 WHERE 子句後面,當 WHERE 子句預設時,它跟在 FROM 子句後面。
HAVING 子句常用於在計算出聚集之後對行的查詢進行控制。)
SELECT CNO, AVG(GRADE), STUDENTS = COUNT(*)
FROM ENROLLS
GROUP BY CNO
HAVING COUNT(*) >= 3
相關子查詢
例 37 查詢沒有選任何課程的學生的學號和姓名。(當一個子查詢涉及到一個來自外部查詢的列時,稱為相關子查詢( Correlated Subquery) 。相關子查詢要用到存在測試謂詞 EXISTS 和 NOT EXISTS ,以及 ALL 、 ANY ( SOME )等。)
SELECT SNO, SNAME
FROM STUDENTS
WHERE NOT EXISTS
(SELECT *
FROM ENROLLS
WHERE ENROLLS.SNO=STUDENTS.SNO)
例 38 查詢哪些課程只有男生選讀。
SELECT DISTINCT CNAME
FROM COURSES C
WHERE ' 男 ' = ALL
(SELECT SEX
FROM ENROLLS , STUDENTS
WHERE ENROLLS.SNO=STUDENTS.SNO AND
ENROLLS.CNO=C.CNO)
例 39 要求給出一張學生、籍貫列表,該表中的學生的籍貫省份,也是其他一些學生的籍貫省份。
SELECT SNAME, BPLACE
FROM STUDENTS A
WHERE EXISTS
(SELECT *
FROM STUDENTS B
WHERE A.BPLACE=B.BPLACE AND
A.SNO < > B.SNO)
例 40 找出選修了全部課程的學生的姓名。
本查詢可以改為:查詢這樣一些學生,沒有一門課程是他不選修的。
SELECT SNAME
FROM STUDENTS
WHERE NOT EXISTS
(SELECT *
FROM COURSES
WHERE NOT EXISTS
(SELECT *
FROM ENROLLS
WHERE ENROLLS.SNO = STUDENTS.SNO
AND ENROLLS.CNO = COURSES.CNO))
關系代數運算
例 41 設有某商場工作人員的兩張表:營業員表 SP_SUBORD 和營銷經理表 SP_MGR ,其關系數據模式如下:
SP_SUBORD (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
SP_MGR (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
其中,屬性 SALPERS_ID 為工作人員的編號 , SALPERS_NAME 為工作人員的姓名 , MANAGER_ID 為所在部門經理的編號 , OFFICE 為工作地點。
若查詢全部商場工作人員,可以用下面的 SQL 語句:
(SELECT * FROM SP_SUBORD)
UNION
(SELECT * FROM SP_MGR)
或等價地用下面的 SQL 語句:
SELECT *
FROM (TABLE SP_SUBORD UNION TABLE SP_MGR)
( 2 ) INTERSECT
(SELECT * FROM SP_SUBORD)
INTERSECT
(SELECT * FROM SP_MGR)
或等價地用下面的 SQL 語句:
SELECT *
FROM (TABLE SP_SUBORD INTERSECT TABLE SP_MGR)
或用帶 ALL 的 SQL 語句:
(SELECT * FROM SP_SUBORD)
INTERSECT ALL
(SELECT * FROM SP_MGR)
或
SELECT *
FROM (TABLE SP_SUBORD INTERSECT ALL TABLE SP_MGR)
( 3 ) EXCEPT
(SELECT * FROM SP_MGR)
EXCEPT
(SELECT * FROM SP_SUBORD)
或等價地用下面的 SQL 語句:
SELECT *
FROM (TABLE SP_MGR EXCEPT TABLE SP_ SUBORD)
或用帶 ALL 的 SQL 語句:
(SELECT * FROM SP_MGR)
EXCEPT ALL
(SELECT * FROM SP_SUBORD)
例 42 查詢籍貫為四川、課程成績在 80 分以上的學生信息及其成績。(自然連接)
(SELECT * FROM STUDENTS
WHERE BPLACE=『 四川 ')
NATURAL JOIN
(SELECT * FROM ENROLLS
WHERE GRADE >=80)
例3.43 列出全部教師的姓名及其任課的課程號、班級。
(外連接與外部並外連接允許在結果表中保留非匹配元組,空缺部分填以 NULL 。外連接的作用是在做連接操作時避免丟失信息。
外連接有 3 類:
( 1 )左外連接( Left Outer Join )。連接運算謂詞為 LEFT [OUTER] JOIN ,其結果表中保留左關系的所有元組。
( 2 )右外連接( Right Outer Join )。連接運算謂詞為 RIGHT [OUTER] JOIN ,其結果表中保留右關系的所有元組。
( 3 )全外連接( Full Outer Join )。連接運算謂詞為 FULL [OUTER] JOIN ,其結果表中保留左右兩關系的所有元組。)
SELECT TNAME, CNO, CLASS
FROM TEACHERS LEFT OUTER JOIN TEACHING USING (TNO)
SQL 的數據操縱
例 44 把教師李映雪的記錄加入到教師表 TEACHERS 中。(插入)
INSERT INTO TEACHERS
VALUES(1476 , ' 李映雪 ' , 44 , ' 副教授 ')
例 45 成績優秀的學生將留下當教師。
INSERT INTO TEACHERS (TNO , TNAME)
SELECT DISTINCT SNO , SNAME
FROM STUDENTS , ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO AND GRADE >= 90
例 47 把所有學生的年齡增加一歲。(修改)
UPDATE STUDENTS
SET AGE = AGE+1
例 48 學生張春明在資料庫課考試中作弊,該課成績應作零分計。
UPDATE ENROLLS
SET GRADE = 0
WHERE CNO = 'C1' AND
' 張春明 ' =
(SELECT SNAME
FROM STUDENTS
WHERE STUDENTS.SNO=ENROLLS.SNO)
例 49 從教師表中刪除年齡已到 60 歲的退休教師的數據。(刪除)
DELETE FROM TEACHERS
WHERE AGE >= 60
SQL 的數據控制
例 50 授予 LILI 有對表 STUDENTS 的查詢權。(表/視圖特權的授予
一個 SQL 特權允許一個被授權者在給定的資料庫對象上進行特定的操作。授權操作的資料庫對象包括:表 / 視圖、列、域等。授權的操作包括: INSERT 、 UPDATE 、 DELETE 、 SELECT 、 REFERENCES 、 TRIGGER 、 UNDER 、 USAGE 、 EXECUTE 等。其中 INSERT 、 UPDATE 、 DELETE 、 SELECT 、 REFERENCES 、 TRIGGER 有對表做相應操作的許可權,故稱為表特權。)
GRANT SELECT ON STUDENTS
TO LILI
WITH GRANT OPTION
例 51 取消 LILI 的存取 STUDENTS 表的特權。
REVOKE ALL
ON STUDENTS
FROM LILI CASCADE
Ⅳ SQL讀取txt內容
http://www.dedecms.com/knowledge/data-base/sql-server/2012/0821/11295.html
你看看這個,希望對你有幫助。
Ⅵ SQL插入語句問題
$sql="insert
into
test
(id,uid,redate,remark)
values
(null,'爸爸',now(),'學生')";
這樣子寫才對吧。
然後,你竟然用if($sql),這個條件,除非你的$sql語句為空,要不總是執行,說成功插入數據!!
Ⅶ 如何在SQL存儲過程中處理錯誤
一、存儲過程中使用事務的簡單語法
在存儲過程中使用事務時非常重要的,使用數據可以保持數據的關聯完整性,在Sql server存儲過程中使用事務也很簡單,用一個例子來說明它的語法格式:
CreateProcereMyProcere
(@Param1nvarchar(10),
@param2nvarchar(10)
)
AS
Begin
SetNOCOUNTON;
SetXACT_ABORTON;
BeginTran
Deletefromtable1wherename=』abc』;
Insertintotable2values(value1,value2,value3);
CommitTran
End
說明:
1 、使用存儲過程執行事物,需要開啟XACT_ABORT參數(默認值為Off),將該參數設置為On,表示當執行事務時,如果出錯,會將transcation設置為uncommittable狀態,那麼在語句塊批處理結束後將回滾所有操作;如果該參數設置為Off,表示當執行事務時,如果出錯,出錯的語句將不會執行,其他正確的操作繼續執行。
2、當SET NOCOUNT 為 ON 時,不返回計數(計數表示受 Transact-SQL 語句影響的行數,例如在Sql server查詢分析器中執行一個delete操作後,下方窗口會提示(3)Rows Affected)。當 SET NOCOUNT 為 OFF 時,返回計數,我們應該在存儲過程的頭部加上SET NOCOUNT ON 這樣的話,在退出存儲過程的時候加上 SET NOCOUNT OFF這樣的話,以達到優化存儲過程的目的。
二、事務內設置保存點
用戶可以在事務內設置保存點或標記。保存點定義如果有條件地取消事務的一部分,事務可以返回的位置。如果將事務回滾到保存點,則必須(如果需要,使用更多的 Transact-SQL 語句和 COMMIT TRANSACTION 語句)繼續完成事務,或者必須(通過將事務回滾到其起始點)完全取消事務。若要取消整個事務,請使用 ROLLBACK TRANSACTION transaction_name 格式。這將撤消事務的所有語句和過程。如:
代碼
CreateProcereMyProcere
AS
Begin
SetNOCOUNTON;
SetXACT_ABORTON;
begintranok--開始一個事務OK
deletefromrxqzwhereqz='rx015'--刪除數據
savetranbcd--保存一個事務點命名為bcd
updateszsetname='李麗s'wherename='李麗'--修改數據
if@@error<>0--判斷修改數據有沒有出錯
begin--如果出錯
rollbacktranbcd--回滾事務到BCD的還原點
committranok--提交事務
end
else--沒有出錯
committranok--提交事務
End
說明:1、@@error判斷是否有錯誤,為0表示沒有錯誤,但是對那種重大錯誤無法捕捉,而且@@error只能前一句sql語句生效。
三、存儲過程使用try…catch捕獲錯誤
在存儲過程中可以使用try…catch語句來捕獲錯誤,如下:
CreateProcereMyProcere
(@Param1nvarchar(10),
@param2nvarchar(10)
)
AS
Begin
SetNOCOUNTON;
Begintry
Deletefromtable1wherename=』abc』;
Insertintotable2values(value1,value2,value3);
Endtry
BeginCatch
SELECTERROR_NUMBER()ASErrorNumber,
ERROR_MESSAGE()ASErrorMessage;
EndCatch
End
說明:1、捕獲錯誤的函數有很多,如下:
ERROR_NUMBER() 返回錯誤號。
ERROR_SEVERITY() 返回嚴重性。
ERROR_STATE() 返回錯誤狀態號。
ERROR_PROCEDURE() 返回出現錯誤的存儲過程或觸發器的名稱。
ERROR_LINE() 返回導致錯誤的常式中的行號。
ERROR_MESSAGE() 返回錯誤消息的完整文本。該文本可包括任何可替換參數所提供的值,如長度、對象名或時間。
2、有些錯誤,如sql語句中的表名稱輸入錯誤,這是資料庫引擎無法解析這個表名稱時,所發生的錯誤在當前的try…catch語句中無法捕獲,必須由外層調用該存儲過程的地方使用 try…catch來進行捕獲。
四、存儲過程中事務和try…catch聯合使用
在存儲過程中使用事務時,如果沒有try…catch語句,那麼當set xact_abort on時,如果有錯誤發生,在批處理語句結束後,系統會自動回滾所有的sql操作。當set xact_abort off時,如果有錯誤發生,在批處理語句結束後,系統會執行所有沒有發生錯誤的語句,發生錯誤的語句將不會被執行。
在存儲過程中使用事務時,如果存在try…catch語句塊,那麼當捕獲到錯誤時,需要在catch語句塊中手動進行Rollback操作,否則系統會給客戶端傳遞一條錯誤信息。如果在存儲過程開始處將set xact_abort on,那麼當有錯誤發生時,系統會將當前事務置為不可提交狀態,即會將xact_state()置為-1,此時只可以對事務進行Rollback操作,不可進行提交(commit)操作,那麼我們在catch語句塊中就可以根據xact_state()的值來判斷是否有事務處於不可提交狀態,如果有則可以進行rollback操作了。如果在存儲過程開始處將set xact_abort off,那麼當有錯誤發生時,系統不會講xact_state()置為-1,那麼我們在catch塊中就不可以根據該函數值來判斷是否需要進行rollback了,但是我們可以根據@@Trancount全局變數來判斷,如果在catch塊中判斷出@@Trancount數值大於0,代表還有未提交的事務,既然進入catch語句塊了,那麼還存在未提交的事務,該事務應該是需要rollback的,但是這種方法在某些情況下可能判斷的不準確。推薦的方法還是將set xact_abort on,然後在catch中判斷xact_state()的值來判斷是否需要Rollback操作。
下面我們來看看兩個例子:
一.使用Set xact_abort on
CreateprocmyProcere
As
begin
setxact_aborton;
begintry
begintran
insertintoTestStuvalues('Terry','boy',23);
insertintoTestStuvalues('Mary','girl',21);
committran
endtry
begincatch
--在此可以使用xact_state()來判斷是否有不可提交的事務,不可提交的事務
--表示在事務內部發生錯誤了。Xact_state()有三種值:-1.事務不可提交;
--1.事務可提交;0.表示沒有事務,此時commit或者rollback會報錯。
ifxact_state()=-1
rollbacktran;
endcatch
end
二.使用Set xact_abort off
CreateprocmyProcere
As
begin
setxact_abortoff;
begintry
begintran
insertintoTestStuvalues('Terry','boy',23);
insertintoTestStuvalues('Mary','girl',21);
committran
endtry
begincatch
--在此不可以使用xact_state來判斷是否有不可提交的事務
--只可以使用@@Trancount來判斷是否有還未提交的事務,未提交的事務未必
--就是不可提交的事務,所以使用@@TranCount>0後就RollBack是不準確的
if@@TranCount>0
rollbacktran;
endcatch
end
另外,對於@@Trancount需要說明的是,begin tran 語句將 @@Trancount加 1。Rollback tran將 @@Trancount遞減到 0,但 Rollback tran savepoint_name 除外,它不影響 @@Trancount。Commit tran 或 Commit work 將 @@Trancount 遞減 1。
Ⅷ SQL語句,設置表中 某個欄位 內容為 string+隨機數字+string
樓上那兩種,如果只有單條記錄的話沒問題,如果是多條記錄,最後就只能update成相同的值了。還是老實用游標處理吧。
建表插入數據:
createtabletable1
(useridint,
FaceUrlvarchar(2000))
insertintotable1(userid)values(1)
insertintotable1(userid)values(2)
insertintotable1(userid)values(3)
insertintotable1(userid)values(4)
insertintotable1(userid)values(5)
執行存儲過程:
declare@FaceUrlvarchar(2000)
declare@useridint
declare@gendervarchar(10)
declare@figureint
declarecur_(1,2,3,4,5)
opencur_1
fetchnextfromcur_1into@userid
while@@fetch_status=0
begin
selecttop1@gender=genderfrom(select'girl'genderunionselect'boy')torderbynewid()
SELECT@figure=cast(floor(rand()*14)asint)+1
updatetable1setFaceUrl='http://static.com/mobile/'+@gender+CAST(@figureasvarchar)+'.png'whereuserid=@userid
fetchnextfromcur_1into@userid
end
closecur_1
deallocatecur_1
執行後結果:
Ⅸ sex char(2) check (sex in("girl","boy"))那裡有錯誤 為什麼sql 2008 說 列名無效 而且書上是這樣寫的
char(2)太小了,只有兩個字元,girl是4個字元,超出范圍了,所以報錯,最好定義的稍大點如:
sex char(5) check (sex in('girl','boy'))
Ⅹ SQL 查詢語句相關
SELECT Sex,avg(datediff(year,Birthday,getdate()))
as age from t_student group by Sex with rollup