Hãy thử điều này một -
DDL:
CREATE TABLE dbo.Table1 (
[EmpId] INT
, [FirstName] VARCHAR(7)
, [LastName] VARCHAR(10)
, [domain] VARCHAR(6)
, [Vertical] VARCHAR(10)
, [Account] VARCHAR(50)
, [City] VARCHAR(50)
)
INSERT INTO dbo.Table1 ([EmpId], [FirstName], [LastName], [Vertical], [Account], [domain], [City])
VALUES
(345, 'Priya', 'Palanisamy', 'DotNet', 'LS', 'Abbott', 'Chennai'),
(346, 'Kavitha', 'Amirtharaj', 'DotNet', 'CG', 'Diageo', 'Chennai'),
(647, 'Kala', 'Haribabu', 'DotNet', 'DotNet', 'IMS', 'Chennai')
Query:
DECLARE @Account VARCHAR(200)
SELECT @Account = 'CG,LS'
SELECT *
FROM Table1
WHERE [Vertical] = 'DotNet' AND (ISNULL(@Account, '') = '' OR Account IN (
SELECT t.c.value('.', 'VARCHAR(20)')
FROM (
SELECT x = CAST('<t>' +
REPLACE(@Account, ',', '</t><t>') + '</t>' AS XML)
) a
CROSS APPLY x.nodes('/t') t(c)
))
Output:
thống kê Extended:
SSMS SET THỐNG KÊ THỜI GIAN + IO:
XML:
(3720 row(s) affected)
Table 'temp'. Scan count 3, logical reads 7, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 187 ms, elapsed time = 242 ms.
CTE:
(3720 row(s) affected)
Table '#BF78F425'. Scan count 360, logical reads 360, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'temp'. Scan count 1, logical reads 7, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
SQL Server Execution Times:
CPU time = 281 ms, elapsed time = 335 ms.
điều gì sẽ xảy ra nếu '' '@ param''' là null, tôi nghĩ đặt' '' @param + = @ delimiter''' phải được đặt '' '@param = ISNULL (@param, '') + @ delimiter''' –
@SuryaPratap đơn giản và đơn giản - không. Điều đó sẽ không tạo ra sự khác biệt nào cho kết quả. –