如下的語法,主要目的是為了自動產生壓縮DB的SQL語法出來跑
可以請有經驗的朋友幫忙回答下面的問題:
1.為何若變數宣告為char時,無論長度設定多大都無法正常跑出語法?
2.中間有一段"+ char(15) + char(10)",若改為"+char(25)",最後'print'出來的結果文字格式會跑掉
-----以下為程式內容----
USE WODB
GO
DECLARE @SHRINKCMD NVARCHAR(MAX)
DECLARE @LOGICAL_NAME NVARCHAR(256)
DECLARE DBList CURSOR FOR
SELECT NAME AS Logical_Name FROM WODB.sys.database_files WHERE STATE_DESC='ONLINE'
OPEN DBList;
FETCH NEXT FROM DBList
INTO @Logical_Name
SET @SHRINKCMD=' USE [WODB]'+' '
+CHAR(13)+CHAR(10)
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @SHRINKCMD=@SHRINKCMD+' DBCC SHRINKFILE ('''+@LOGICAL_NAME+''',50'+',TRUNCATEONLY)' +CHAR(13)+CHAR(10)
select @sqlcmd =@sqlcmd +'DBCC Shrinkfile(N''' + @filename + ''''+',0, Truncateonly)' + char(13) + char(10)
FETCH NEXT FROM DBList
INTO @Logical_Name
END
--EXEC (@SHRINKCMD)
PRINT (@SHRINKCMD)
CLOSE DBList;
DEALLOCATE DBList;
cath提到:
2.中間有一段"+ char(15) + char(10)",若改為"+char(25)",最後'print'出來的結果文字格式會跑掉
不用改啦~~ 是控制字元....
定位字元 ==>char(9)
換行字元 ==>char(10)
歸位字元 ==>char(13)
cath提到:
DECLARE DBList CURSOR FOR
這一行建議改成 DECLARE DBList CURSOR LOCAL FOR
這樣較省資源,而且能確定這個Job在結束時,或發生意外時,DBList能被系統所關閉