---
# System prepended metadata

title: SQP Procedure
tags: [Sql, '2022']

---

###### tags: `Sql`,`2022`

{%hackmd BJrTq20hE %}

# SQP Procedure

## SELECT Temp Table

寫法1 :
SELECT的資料只從一個Table來，並複製到Temp Table。再從Temp Table取出需要的欄位
```sql

DECLARE @ID int, @Name NVARCHAR(10)

SELECT TOP 1 [ID],[Name]
INTO #dttemp
FROM [TableA] A 
WHERE ID = @ID

SELECT @Name = Name
FROM #dttemp
```

寫法2 :

如果有多張 TABLE 要 JOIN 可以這樣寫

```sql
DECLARE @Name NVARCHAR(10)

INSERT INTO #dtTemp		
SELECT 
FROM [dbo].[TableA] A
LEFT JOIN [TableB] B ON A.ID = B.SID
WHERE A.ID = 1

SELECT @Name = SELECT Name FROM #dtTemp
```

## Drop Temp Table

官方有提供的刪除語法，可以保障不會有山不到戰存資料表的狀況

```sql
IF OBJECT_ID('tempdb..#dttemp') IS NOT NULL 
    DROP TABLE #temp
```

## 資料是否存在 EXIST VS Count

如果是要判斷**資料是否存在**建議使用** IF EXISTS()**

如果是要明確知道資料筆數，才使用**SELECT COUNT(*)**

因為 IF EXISTS() 只會判斷資是否有資料，當出現第一筆符合條件的資料，就不會繼續往下尋找，而 SELECT COUNT(*) 則是會找出全部資料才停止，所以效能會比較差。

```sql
--建議用法
IF EXISTS(SELECT 1 FROM TableA WHERE ID = 1)

--避免使用 Count(*)
IF EXISTS(SELECT COUUNT(*) FROM TableA WHERE ID = 1)

IF (SELECT COUNT(*) FROM TableA WHERE D = 1) > 0

DECLARE @count int
SET @count = 0
SELECT @count = COUNT(*) FROM TableA WHERE ID = 1
IF (@count > 0) BEGIN.....END
```