###### 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
```