彙整 SQL Server 7.0 開發與維運常見問題的標準解答,涵蓋資料匯出、系統限制、版本相容、函數行為、異質查詢、觸發器、安全性擴充預存程序錯誤處理。
在 Query Analyzer 執行動態產生 BCP 指令碼:
SELECT 'bcp ' + DB_NAME() + '..' + name + ' OUT d:\backup\' + name + '.txt -c -S' + @@SERVERNAME + ' -Usa -P'
FROM sysobjects WHERE type = 'U'
將結果儲存為 .bat 檔,移除標題與結尾統計行,於命令提示字元執行即可批量匯出所有使用者表。
DMO 版本不同,但 T-SQL 預存程序本身通常相容。若使用 DMO 物件模型操作,需重寫對應 7.0 版 DMO。純 T-SQL 腳本多半可直接執行,建議逐一測試驗證。
BCP 使用字元模式 (-c) 匯入 DATETIME 時,毫秒精度為 3.33 毫秒 (1/300 秒),匯入後會四捨五入至最接近的刻度值(如 .000, .003, .007...),導致原始毫秒值看似改變。若需完整保留,請使用原生模式 (-n) 或格式化檔指定精度。
STDEV 需至少兩筆非 NULL 資料點。單一資料列或全部為 NULL 時會拋出此錯誤。解決:先檢查 COUNT(*) > 1 再計算,或用 CASE WHEN COUNT(*) > 1 THEN STDEV(...) ELSE NULL END。
建立連結伺服器:
EXEC sp_addlinkedserver 'OracleSvr', 'Oracle', 'MSDAORA', 'Oracle_TNS_Name'
EXEC sp_addlinkedsrvlogin 'OracleSvr', FALSE, NULL, 'oracle_user', 'oracle_pass'
-- 查詢
SELECT * FROM OPENQUERY(OracleSvr, 'SELECT * FROM scott.emp')
需安裝 Oracle Client 並配置 OLE DB Provider for Oracle (MSDAORA)。
支援。需啟用資料庫選項:EXEC sp_dboption 'dbname', 'recursive triggers', 'true'。預設關閉。遞迴觸發器需謹慎設計終止條件,避免無限迴圈。
Server: Msg 8198, Level 16, State 10, Procedure xp_logininfo, Line 58
Could not obtain information about Windows NT group/user ''
原因: 傳入空字串或 NULL 給 @acctname 參數。解決: 確認呼叫語法提供有效的 Windows 帳號/群組名稱,例如:EXEC xp_logininfo 'DOMAIN\User', 'all'。若列舉所有登入,請使用 EXEC xp_logininfo NULL, 'all' (不加引號)。
掌握這些常見問題的成因與標準解法,能大幅縮短疑難排解時間,提升維運效率。