跳到主要內容

發表文章

目前顯示的是有「T-SQL程式設計」標籤的文章

T-SQL 系統函數@ROWCOUNT的使用

在專案程式撰寫中,突然發現有一段預存程式怪怪的,因為他所產生出來的Exection 應該是不會發生的,但是卻出現了。程式是像這樣的 CREATE PROCEDURE UPDATE_TABLE1 @ParamKey VARCHAR(10) ,@ParamValue VARCHAR(20) ,@ParamDate DATETIME AS BEGIN --更新TABLE1 UPDATE TABLE1 SET ColumnValue = @ParamValue ,ColumnDate = @ParamDate WHERE ColumnKey = @ParamKey --產生一串字 DECLARE @VarText VARCHAR(20) SET @VarText = '這是示範資料' + ColumnValue --前面的執行程序有影響1筆(含)以上的資料 --再新增資料到TABLE2 IF @@ROWCOUNT > 0 INSERT INTO TABLE2 (ColumnKey, ColumnText) VALUES (@ParamKey, @VarText) END 乍看之下好像沒什麼不對,但執行時卻會發生Excetion [INSERT 陳述式與 FOREIGN KEY 條件約束 "FK_TABLE2_ColumnKey" 衝突。衝突發生在資料庫 "DBTest",資料表 "dbo.TABLE1", column 'ColumnKey'。] ,其實這段語法隱藏了一個陷阱…

隨機取出資料表中資料

語法類型:T-SQL 使用時機:當需要隨機取出資料表中的資料時 解決方案: ACCESS: SELECT TOP 1 * FROM Table ORDER BY RND(column) MySQL: SELECT column FROM table ORDER BY RAND() LIMIT 1 PostgreSQL: SELECT column FROM table ORDER BY RANDOM() LIMIT 1 Microsoft SQL Server: SELECT TOP 1 column FROM table ORDER BY NEWID() IBM DB2: SELECT column FROM table ORDER BY RAND() FETCH FIRST 1 ROWS ONLY Oracle: SELECT column FROM ( SELECT column FROM table ORDER BY dbms_random.value ) WHERE rownum = 1 or SELECT * sample(1) FROM table WHERE .... or NO WHERE CLAUSE, 10%: SELECT * FROM table sample(10)