什么是大规模动态选择和查询的最佳实践

时间:2016-03-29 09:45:36

标签: sql .net sql-server-2008

我目前的目标是创建动态选择和查询。在我们的例子中,我们有一个参考表。引用表包含引用列值和表名。我们使用这些引用在其他表上创建动态查询。例如:

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,并且列的类型和顺序不同。并且将来可能会插入新的表类型。

那么,这样做的最佳做法是什么?

此致

1 个答案:

答案 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)更快”。