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