iT邦幫忙

0

tsql程式釋疑~??

cath 2012-10-15 17:42:323206 瀏覽

如下的語法,主要目的是為了自動產生壓縮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;

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

6
charmmih
iT邦研究生 5 級 ‧ 2012-10-15 19:15:02
最佳解答

cath提到:
2.中間有一段"+ char(15) + char(10)",若改為"+char(25)",最後'print'出來的結果文字格式會跑掉

不用改啦~~ 是控制字元....
定位字元 ==>char(9)
換行字元 ==>char(10)
歸位字元 ==>char(13)

外獅佬 iT邦大師 1 級 ‧ 2012-10-16 11:00:07 檢舉

再說...CHR(15) + CHR(10) 基本上也不會等於CHR(25)....

總裁 iT邦好手 1 級 ‧ 2012-10-16 11:06:17 檢舉

"男人"+"女人"也不會只變出兩個人...汗

cath iT邦新手 5 級 ‧ 2012-10-24 23:28:09 檢舉

不好意思 真的才疏學淺 =_=||
那CHR這到底是什麼東西阿
我把它當成char了 Y_Y

2
summertw
iT邦好手 1 級 ‧ 2012-10-16 20:15:11

cath提到:
DECLARE DBList CURSOR FOR

這一行建議改成 DECLARE DBList CURSOR LOCAL FOR
這樣較省資源,而且能確定這個Job在結束時,或發生意外時,DBList能被系統所關閉

我要發表回答

立即登入回答