gpt4 book ai didi

sql-server-2005 - "Array parameter"TSQL

转载 作者:行者123 更新时间:2023-12-01 08:11:24 25 4
gpt4 key购买 nike

我有一个包含调用数据记录的表,每个调用都有调用数据,其中一个字段是我们在查询数据库时使用的 CallerId。

我们使用以下 TSQL 来模拟一个数组参数,这是可行的方法还是偏离了方向?

ALTER PROCEDURE [dbo].[spStudio_Get_Smdr]
@beginTime INT,
@endTime INT,
@subscribers VARCHAR(MAX) = NULL,
@exchanges VARCHAR(MAX) = '1:',
@beginDateValue int,
@endDateValue int
AS
BEGIN
SET NOCOUNT ON;

DECLARE @exch TABLE(Item Varchar(50))
INSERT INTO @exch
SELECT Item FROM [SplitDelimitedVarChar] (@exchanges, '|') ORDER BY Item


DECLARE @subs TABLE(Item Varchar(19))
INSERT INTO @subs
SELECT Item FROM [SplitDelimitedVarChar] (@subscribers, '|') ORDER BY Item

SELECT
,[Level]
,[Timestamp]
,[EndYear]
,[EndDate]
,[EndTime]
,[CallingNumber]
,[DialledNumber]
..more fields between
,[DateValue]
,[TimeValue]
FROM [SmdrFormat] AS S
WHERE
(S.[DateValue] BETWEEN @beginDateValue AND @endDateValue)
AND
(S.[TimeValue] BETWEEN @beginTime AND @endTime)
AND
EXISTS(SELECT [Item] FROM @exch WHERE [Item] = S.[Level])
AND
(@subscribers IS NULL OR (EXISTS(SELECT [Item] FROM @subs WHERE [Item] = S.[CallingNumber]
OR [Item] = S.[DialledNumber])))

END

我正在使用一个表变量来存储我从中拆分出来的临时表 |我们作为参数传入的分隔字符串。 SplitDelimitedVarChar SQL 函数分割一个 VarChar 并返回一个表变量。时间和日期值存储为整数。

WHERE 子句中使用的所有字段都已编入索引。

当分隔的字符串参数很短时,这会很好地工作,但当它变大时(多达数百个由 | 分隔的字符串),执行查询需要相当长的时间。

因为我显然不是 SQL 专家,所以我觉得可能有人可以告诉我我是真的不擅长 SQL 还是只是有部分错误?任何建议表示赞赏

提前致谢约翰

最佳答案

看看Arrays and Lists in SQL Server作者:厄兰·索马斯科格

关于sql-server-2005 - "Array parameter"TSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1070095/

25 4 0