bestlong 怕失憶筆記

當健忘由隨機逐漸趨向常態時,作筆記是非常必要的

Entries Tagged ‘SQL’

SQL Fiddle 一個線上學習與測試多種資料庫 SQL 語法的網站

SQL Fiddle

http://www.sqlfiddle.com/

想要學習、練習 SQL 語法不需要自己面對建立執行環境的地獄,到 SQL Fiddle 網站馬上到天堂。

提供網頁操作介面

SQL Fiddle-1-home

目前有支援下列資料庫:

  • MySQL 5.5.30, 5.6.6 m9, 5.1.61
  • Oracle 11g R2
  • PostgreSQL 9.1.9, 9.2.4, 8.4.17, 8.3.20
  • SQLite (WebSQL)
  • SQLite (SQL.js)
  • MS SQL Server 2012, 2008

SQL Fiddle-2-database-list

使用超簡單,畫面分為三大區:
1.左邊用來建立資料表結構與新增資料,也就是 DDL 部分,
2.右邊用來執行 SQL 語法,也就是 DML 部分
3.下方就是顯示執行結果與執行計畫

若是想要快速體驗,可以直接點選功能表的 View Sample Fiddle 馬上載入系統內準備的 SQL 來享用,很貼心喔。

SQL Fiddle-3-sample

Leave a Comment

PHP執行MSSQL預儲程序時出現mssql_bind() [function.mssql-bind]: Unable to set parameter錯誤

出現問題的程式碼如下:

1
2
3
4
5
<?php
$sSQL = "select ..."; //超過 300 個字元的SQL指令
$proc = mssql_init('MyPagingRecordSet', $db_link);
mssql_bind($proc, '@strSQL', $sSQL, SQLVARCHAR, false, false) or print_r(error_get_last());
?>

執行的預儲程序

1
2
3
4
5
6
7
CREATE PROCEDURE MyPagingRecordSet
  @strSQL VARCHAR(1000),  --查詢 sql,如 select * from [user]
  @PageIndex INT = 1,     --查詢的頁號
  @PageSize INT = 30      --每頁顯示紀錄數
AS
--省略內容
GO

不過當 $sSQL 變數內只有很短的 SQL 命令時, 程式是可以正常執行的, 所以改成指定參數長度如下:

1
mssql_bind($proc, '@strSQL', $sSQL, SQLVARCHAR, false, false, 1000) or print_r(error_get_last());

執行結果還是一樣的錯誤訊息, 這應該是字串長度導致的問題, 再把程式改成

1
mssql_bind($proc, '@strSQL', $sSQL, SQLTEXT, false, false) or print_r(error_get_last());

這樣就可以正常執行了, 而 Stored Procedure 的參數的資料型別也可以改成

1
2
3
4
5
6
7
CREATE PROCEDURE MyPagingRecordSet
  @strSQL text,        --查詢 sql,如 select * from [user]
  @PageIndex INT = 1,  --查詢的頁號
  @PageSize INT = 30   --每頁顯示紀錄數
AS
--省略內容
GO

是否要改, 就看執行上是否有其他問題了, 目前沒改也可以執行.

Leave a Comment

如何在 Firebird 進行資料分頁?

在 MSSQL 有 Top n 並配合排序手法
在 MySQL 有 Limit n, m
在 PostgreSQL 有 Limit n offset m

而在 Firebird 進行資料分頁可以使用 FIREST n SKIP m 的 SQL 語法

FIRST n 表示提取 n 條記錄, SKIP m 表示從 m+1 條記錄開始提取(跳過 m 條記錄)。

1. 從資料表中取第 1 條記錄開始的 5 條記錄

1
SELECT FIRST 5 ID,F1,F2 FROM TBLNAME

2. 從資料表中取第 6 條記錄開始到結束的所有記錄

1
SELECT skip 5 ID,F1,F2 FROM TBLNAME

3. 從資料表中取第 10 條第 30 條記錄之間的記錄

1
SELECT FIRST 20 skip 9 ID,F1,F2 FROM TBLNAME

Leave a Comment

在 MSSQL 2005 停用或啟用資料表上定義的 DML 觸發程序

從 MSSQL 2005 版本開始,想停用或啟用 Trigger 就簡單多了,語法如下:

停用 Trigger ( 觸發程序 )

語法:

1
2
DISABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]

實作:

1
DISABLE TRIGGER dbo.trigName ON dbo.tableName

啟用 Trigger ( 觸發程序 )

語法:

1
2
ENABLE TRIGGER { [ schema_name . ] trigger_name [ ,...n ] | ALL }
ON { object_name | DATABASE | ALL SERVER } [ ; ]

實作:

1
ENABLE TRIGGER dbo.trigName ON dbo.tableName

Comments (1)

在 MSSQL 2000 停用或啟用資料表上定義的 DML 觸發程序

有些應用系統前端只負責資料的異動,而連動的部份就由被異動的資料表上所定義的觸發程序來處理。例如領料單會去扣庫存數的狀況。可是當我們在進行匯入或複製資料之時,就會希望不要執行觸發程序的時候,就需要自行手動管理了。

我們可以用下列 SQL 命令來達成:

1
2
--停用觸發程序
ALTER TABLE tableName DISABLE TRIGGER trigName
1
2
--重新啟用觸發程序
ALTER TABLE tableName ENABLE TRIGGER trigName

Leave a Comment

  • 工商服務

    廣告讀取中...
  • 近期留言

  • 標籤

  • 彙整