MS-SQL

出自ProgWiki

跳轉到: 導航, 搜尋

參照:『維基百科~Microsoft_SQL_Server

目錄

SQL Server版本

相關文件

Technet
其他

Microsoft SQL Server Express

主條目:SQL Server Express

SQL Server 2005 降轉到 SQL Server 2000

自訂SQL Server 2005擴充用

FAQ

不同版本的SQL Server共存

SQL Server被MS-XML卡住裝不起來

數值轉字串(插入逗號)

DECLARE @DATA INT
SET @DATA = 123456
 
SELECT CONVERT(NVARCHAR(20),CAST(@DATA AS MONEY),1)   
--會有小數點後2位
--輸出: 123,456.00
 
SELECT SUBSTRING(CONVERT(NVARCHAR(20),CAST(@DATA AS MONEY),1),1,LEN(CONVERT(NVARCHAR(20),CAST(@DATA AS MONEY),1))-3)  
--移除小數點後2位
--輸出: 123,456

字串轉數值(移除逗號)

DECLARE @DATA VARCHAR(32)
SET @DATA = N'123,456'
 
SELECT CASE WHEN @DATA='' THEN 0 ELSE CONVERT(DECIMAL(14,0),REPLACE(@DATA,',','')) END

遠端 MS-SQL Server 2005的資料查詢

【開始】→【程式集】→【Microsoft SQL Server 2005】→【組態工具】→【SQL Server 介面區組態】
→【功能的介面區組態】→【特定遠端查詢】→【啟用OPENROWSET和OPENDATASOURCE支援】
SELECT *
FROM OPENDATASOURCE('SQLNCLI','Data Source=主機名稱;User id=帳號;Password=密碼').[DB名稱].[dbo].[TABLE名稱]

資料庫備份

備份DB
USE MyDB;
BACKUP DATABASE MyDB TO DISK='D:\Backup\MyDB\MyDB_20080205.bak';
快速複製DB(以備份檔進行還原到其他的DB, FILE=1代表備份檔中第1個DB)
RESTORE DATABASE [MyDB2]
 FROM  DISK = N'D:\Backup\MyDB\MyDB_20080205.bak'
 WITH  FILE = 1, 
 MOVE N'MyDB' TO N'E:\DB\MyDB2.mdf',
 MOVE N'MyDB_log' TO N'E:\DB\MyDB2.ldf',
 KEEP_REPLICATION,  NOUNLOAD,  REPLACE,  STATS = 10
相關範例:

如何快速清空Table

TRUNCATE TABLE [table_name]

如何刪除LOG

USE MyDB
BACKUP LOG MyDB WITH no_log
DBCC SHRINKFILE (N'MyDB_Log' , 0, TRUNCATEONLY)

回傳預設DB內的所有Table名稱(含系統Table名稱)

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'

表格行列轉換

CREATE TABLE #test(id INT,name VARCHAR(20),quarter NVARCHAR(1),profile INT)
 
INSERT INTO #test VALUES(1,'a','1',1000)
INSERT INTO #test VALUES(1,'a','2',2000)
INSERT INTO #test VALUES(1,'a','3',4000)
INSERT INTO #test VALUES(1,'a','4',5000)
INSERT INTO #test VALUES(2,'b','1',3000)
INSERT INTO #test VALUES(2,'b','2',3500)
INSERT INTO #test VALUES(2,'b','3',4200)
INSERT INTO #test VALUES(2,'b','4',5500)
 
SELECT * FROM #test
 
SELECT id,name,
    [1] AS "第一季",
    [2] AS "第二季",
    [3] AS "第三季",
    [4] AS "第四季"
FROM #test
pivot
(
    SUM(profile)
    FOR quarter in ([1],[2],[3],[4])
)
AS pvt

以C#寫SQL CLR函數

SQL-Server如何Select到Oracle裡的資料

  1. SQL Server 如何設定 Linked Server?
  2. 關於LinkDB時,【Oracle Provider for OLE DB】這個提供者,不可使用,不然資料無法正常從Oracle之中Select出來。
  3. LinkDB時,需使用【MicroSoft OLE DB Provider for Oracle】這個提供者,(只需設【產品名稱】與【資料來源】跟【Oracle Net管理員】中的【服務命名】一樣,以及在安全性中設連接Oracle的使用者帳號與密碼)
    且查詢前,需要設:
    1. SET ANSI_NULLS ON
    2. SET QUOTED_IDENTIFIER ON
    3. SET ANSI_WARNINGS ON (備註:Debug時,使用。)
  4. 部分的Oracle欄位,可能與MS-SQL不相容,需另外在Oracle裡設View,另外作資料型態的轉換
OPENQUERY

無法解析 equal to 作業中 "Chinese_Taiwan_Stroke_CI_AS" 與 "Latin1_General_CI_AI" 之間的定序衝突。

輸出Table或查詢到檔案

【開始】→【程式集】→【Microsoft SQL Server 2005】→【組態工具】→【SQL Server 介面區組態】
→【功能的介面區組態】→【xp_cmdshell】
→【啟用xp_cmdshell】勾選
DECLARE @cmd VARCHAR(MAX);
SELECT @cmd = 'bcp [MyDB].[dbo].[MyTable] out "c:\MyTable.txt" -c -T -t "," -r "\n"';
EXEC master..xp_cmdshell @cmd;
DECLARE @cmd VARCHAR(MAX);
SELECT @cmd = 'bcp "select * from [MyDB].[dbo].[MyTable]" queryout "c:\MyQuery.txt" -c -T -t "," -r "\n"';
EXEC master..xp_cmdshell @cmd;
BULK INSERT [MyDB].[dbo].[MyTable] FROM 'c:\MyTable.txt' WITH
(
      BATCHSIZE = 1000,
      FIELDTERMINATOR = ',',
      ROWTERMINATOR = '\n',
      TABLOCK
)

使用CTE (Common Table Expression),來改善原本多層式Select的效能

SQLCMD

SQLCMD -S 127.0.0.1 -U sa -P 1234 -Q "select 1+2"
SQLCMD /?
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\SqlCmd" -S localhost\SQLExpress -U sa -P 密碼 -Q "BACKUP DATABASE myDB TO DISK='D:\db_bak\myDB.bak'"

判斷暫存Table是否存在?再做刪除暫存Table

IF (OBJECT_ID('tempdb..#TempTable') IS NOT NULL)  DROP TABLE #TempTable;

SQL預存程序中,執行SQL預存程序,並傳回查詢結果給上一層的SQL預存程序;或是使用SQL預存程序動態查詢不同的Table

SQL Server怎麼查看執行過的T-SQL的Log記錄?

個人工具
名字空間
變換
動作
導航
分類
其他
技術類News或部落格
工具箱