顯示具有 sql-server 標籤的文章。 顯示所有文章
顯示具有 sql-server 標籤的文章。 顯示所有文章

2020年2月14日 星期五

SQL Server 透過指令備份資料庫

在客戶的主機安裝系統,想說要幫忙設定備份資料庫
沒想到,SQL Server Agent 啟無法啟用

所以只好想到使用指令的方式進行備份,看你目前需要什麼樣的備份就執行以下的 script


1.完整備份
DECLARE
@backupTime VARCHAR(20)
DECLARE
@fileName VARCHAR(1000)
SELECT
@backupTime=(CONVERT(VARCHAR(8), GETDATE(), 112) +REPLACE(CONVERT(VARCHAR(5), GETDATE(), 114), ':', ''))
SELECT
@fileName='D:\Backup\DB\DBNAME_'+@backupTime+'.bak'
BACKUP DATABASE [DBNAME] TO  DISK =@fileName  WITH NOFORMAT, NOINIT,  NAME = N'db-ALL', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

2.差異備份
DECLARE
@backupTime VARCHAR(20)
DECLARE
@backupWeek VARCHAR(2)
DECLARE
@fileName VARCHAR(1000)
SELECT
@backupTime=(CONVERT(VARCHAR(8), GETDATE(), 112) +REPLACE(CONVERT(VARCHAR(5), GETDATE(), 114), ':', ''))
SELECT
@backupWeek=datepark(wk,getdate())
SELECT
@fileName='D:\Backup\DB\DBNAME_'+@backupTime+'_'+@backupWeek+'.bak'
BACKUP DATABASE [DBNAME] TO  DISK =@fileName  WITH DIFFERENTIAL, NOFORMAT, NOINIT,  NAME = N'db_DIFFERENTIAL', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

3.交易備份
DECLARE
@backupTime VARCHAR(20)
DECLARE
@backupWeek VARCHAR(2)
DECLARE
@fileName VARCHAR(1000)
SELECT
@backupTime=(CONVERT(VARCHAR(8), GETDATE(), 112) +REPLACE(CONVERT(VARCHAR(5), GETDATE(), 114), ':', ''))
SELECT
@backupWeek=datepark(wk,getdate())
SELECT
@fileName='D:\Backup\DB\DBNAME_'+@backupTime+'_'+@backupWeek+'tran.bak'
BACKUP DATABASE [DBNAME] TO  DISK =@fileName  WITH NO_TRUNCATE, NOFORMAT, NOINIT,  NAME = N'db_transaction', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO


可以選擇其一種 存到sql script file (EX: dbbackup.sql),再執行以下command 指令 進行執行
sqlcmd -S  instanceName -E -i c:\dbbackup.sql

這樣就可以備份資料庫啦
再利用工作排程把這個指令加入排程即可

2019年2月26日 星期二

SQL Server stored procedure varchar 長度問題

 

在處理一個stored procedure 問題,看起來script沒啥問題,但追查後發現

原本是宣告varchar(8000) 的變數,但在SQL Server 執行stored procedure 時列印該變數時發現,長度還沒到8000就會被截掉了,這問題似乎沒人遇到過,頂多就是有人遇到 在組宣告為varchar(Max)字串變數時,發現長度會被截掉字串 ,要在組字串時都強制宣告為varchar(Max)  才能排除 (請參考 [SQL]VARCHAR(MAX)字串相加的問題)

不遺我不是用這個解法,而是將原本宣告varchar(8000)的變數改宣告為varchar(Max) 就正常了,非常怪異,不露至少是解決了此問題,在此紀錄下來方便查詢 

2016年11月8日 星期二

MSSQL Server 暫存表格的使用


最近在進行資料庫的語法轉換
很多語法都是很漠生,當然也有很多都是第一次使用

記一下,方便日後追蹤

1.在tempdb中建立

  暫存TABLE前置詞#  => 只有自己這條連線可查詢使用
  暫存TABLE前置詞## =>  全域的暫存TABLE,其他連線可查詢此TABLE

Create Table #TEMP_FILE ( id varchar(10) )


而上述暫存TABLE在連線中斷後就會被清除
這裡是講connection 斷線後,不是一次的執行,建議在使用後不用了,就要手動歸還,不要等連線後再還,養成良好習慣,可以不用管是不是在這connection已經建立了
而歸還的方式如下:

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

2.在記憶體中宣告(SQL Server 2000以後即支援)
在本次批次作業結束後自動清除

 DECLARE @TEMP_FILE TABLE( id varchar(10) )


參考資料來源:
http://deanma.blogspot.tw/2012/01/ms-sql-temp-table.html
http://cbw0731.pixnet.net/blog/post/24993864-暫存表(temporary-tables)的使用簡介
http://stackoverflow.com/questions/659051/check-if-temp-table-exist-and-delete-if-it-exists-before-creating-a-temp-table