SQL stored procedure 的一些不常用寫法 2023-03-24 15:49:29

SELECT TOP 1
    STUFF((
 SELECT ',,,'+cast(show_type as varchar(max)) FROM FAQ_Chat WHERE parentID = db1.id FOR XML PATH('')
    ),1,3,'') AS child_show_type
From FAQ_Chat db1

子查詢把字串接起來
cast() 將欄位轉變資料型態
FOR XML PATH('') 把子查詢選取的資料都串接起來
STUFF()取代字串,後面三個欄位,第一個為第幾個字元開始,第二個為選取幾個字元,第三個為取代成甚麼


WHERE 數字欄位 IN (字串) 的方法
有使用了兩種
1.
set @condition_parentID = @loop_parentID
set @sql = 'select @loop_parentID=isnull(@loop_parentID + ",", "")+cast(id as varchar(30))  from FAQ_Chat where parentID IN ('+@condition_parentID+')'
exec sp_executesql @sql, N'@loop_parentID nvarchar(max) OUTPUT', @loop_parentID = @loop_parentID OUTPUT

使用sp_executesql  把參數帶入到SQL語法中,要取出來繼續使用的參數記得加OUTPUT

2.
SELECT
    (
 SELECT SUM(CAST(status AS INT)) FROM FAQ_Chat WHERE charindex(','+LTRIM(STR(id))+',', db1.parent_root) > 0
    ) AS parent_status
FROM dbo.FAQ_Chat db1

使用charindex尋找字串是否有包含某個字串
第一個值是要尋找的字串,第二個值是要從哪個字串尋找
如果 >0 就是有包含