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

SQL Server 實用小技巧:NULL 與空字串辨識、啟用 xp_cmdshell、避免 UPDATE 子查詢多筆回傳

     編輯:關於SqlServer

三個常見開發情境的實用技巧:

1. 分辨 NULL 與空字串 ('')

在 SSMS 資料表格檢視中:

  • 無任何顯示 (空白) → 可能是 空字串 ''。
  • 顯示 <NULL> → 為 NULL 值。

查詢語法不同:


-- 找空字串
SELECT * FROM tbl WHERE col = ''

-- 找 NULL (必須用 IS NULL)
SELECT * FROM tbl WHERE col IS NULL

陷阱:WHERE col = '' 找不到 NULL;WHERE col IS NULL 找不到空字串。更新時同理。

2. SQL Server 2005 啟用 xp_cmdshell 執行 BCP

預設停用 xp_cmdshell。啟用方式:

  1. 開啟 外部應用配置工具 (Surface Area Configuration)。
  2. 選「功能的外部應用配置」→ MSSQLSERVER → Database Engine。
  3. 勾選 xp_cmdshell → 確定。

或用 T-SQL (需 sysadmin):


EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1; RECONFIGURE;

3. UPDATE 子查詢回傳多筆導致錯誤

錯誤寫法 (子查詢可能因 JOIN 產生重複列):


UPDATE TableA
SET date = (SELECT b.date FROM TableA a, TableB b WHERE a.id = b.id)
-- 子查詢若回傳 >1 列會報錯 "Subquery returned more than 1 value"

正確寫法 (相關子查詢,保證單值):


UPDATE TableA
SET date = (SELECT b.date FROM TableB b WHERE b.id = TableA.id)
-- 每個 TableA 列只對應一個 TableB 列

或用 JOIN 更新 (SQL Server 支援):


UPDATE a
SET a.date = b.date
FROM TableA a
INNER JOIN TableB b ON a.id = b.id
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved