我目前的目标是创建动态选择和查询。在我们的例子中,我们有一个参考表。引用表包含引用列值和表名。我们使用这些引用在其他表上创建动态查询。例如:
select * from {table} where {pk1} in (...) and {pk2} in {...}
此生成的查询存在问题。问题是某些行在结果中返回但它们不在查询中,因为在查询中是不同的条件。
将sql生成更改为喜欢这个
select * from {table} where ( {pk1}=(value1) and {pk2}=(value2) ) or ( {pk1}=(value3) and {pk2}=(value4) ) ...)
在这种情况下问题已解决,但查询执行时间不好而不是“IN”查询。它慢了大约10-20倍。并且查询字符串太大而不是“IN”查询。
我们不能使用表值查询,因为我们无法动态地为每个表创建新的TYPE,并且列的类型和顺序不同。并且将来可能会插入新的表类型。
那么,这样做的最佳做法是什么?
此致
答案 0 :(得分:-1)
我认为,您可以将临时表用于“in”语句,
IF (OBJECT_ID('tempdb..#tid') IS NULL)
BEGIN
CREATE TABLE #tid( Id BIGINT);
INSERT INTO #tid (Id) VALUES (1),
(2),
(3),
(4),
(5),
(6),
(7),
(8),
--......
(10000);
END
select * from {table} where {pk1} in (SELECT Id FROM #tid);
这个用法比“in(1,2,3,4,...,10000)更快”。