首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 7.0 常見問題彙整:BCP 批量匯出、並發限制、DMO 相容性、DateTime 毫秒差異、STDEV 錯誤、Oracle 連結查詢、遞迴觸發、xp_logininfo 錯誤

     編輯:關於SqlServer

彙整 SQL Server 7.0 開發與維運常見問題的標準解答,涵蓋資料匯出、系統限制、版本相容、函數行為、異質查詢、觸發器、安全性擴充預存程序錯誤處理。

1. 快速將資料庫所有表以 BCP 匯出

在 Query Analyzer 執行動態產生 BCP 指令碼:

SELECT 'bcp ' + DB_NAME() + '..' + name + ' OUT d:\backup\' + name + '.txt -c -S' + @@SERVERNAME + ' -Usa -P'
FROM sysobjects WHERE type = 'U'

將結果儲存為 .bat 檔,移除標題與結尾統計行,於命令提示字元執行即可批量匯出所有使用者表。

2. 同時使用的表格與檢視表數目限制

  • SQL Server 7.0:256
  • SQL Server 6.5:16

3. SQL Server 7.0 能否執行 SQL Server 6.5 的預存程序?

DMO 版本不同,但 T-SQL 預存程序本身通常相容。若使用 DMO 物件模型操作,需重寫對應 7.0 版 DMO。純 T-SQL 腳本多半可直接執行,建議逐一測試驗證。

4. BCP 匯入 DateTime 欄位後毫秒值不同

BCP 使用字元模式 (-c) 匯入 DATETIME 時,毫秒精度為 3.33 毫秒 (1/300 秒),匯入後會四捨五入至最接近的刻度值(如 .000, .003, .007...),導致原始毫秒值看似改變。若需完整保留,請使用原生模式 (-n) 或格式化檔指定精度。

5. STDEV 函數出現 "A domain error occurred"

STDEV 需至少兩筆非 NULL 資料點。單一資料列或全部為 NULL 時會拋出此錯誤。解決:先檢查 COUNT(*) > 1 再計算,或用 CASE WHEN COUNT(*) > 1 THEN STDEV(...) ELSE NULL END。

6. Query Analyzer 查詢 Oracle 資料

建立連結伺服器:

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)。

7. SQL Server 7.0 支援遞迴觸發器嗎?

支援。需啟用資料庫選項:EXEC sp_dboption 'dbname', 'recursive triggers', 'true'。預設關閉。遞迴觸發器需謹慎設計終止條件,避免無限迴圈。

8. 執行 xp_logininfo 出現 Msg 8198

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' (不加引號)。

延伸閱讀

掌握這些常見問題的成因與標準解法,能大幅縮短疑難排解時間,提升維運效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved