在sql 2008中的语句时嵌套动态情况

时间:2010-10-25 10:06:28

标签: sql sql-server case where-clause where

我在.net中有以下代码。

foreach (string key in EntityNumbers.Keys)
{

                    if (EntityNumbers[key] != null)
                    {
                        e = new WebServices.Entity();
                        e.HierarchyLevel = key;
                        e.Number = EntityNumbers[key];
                        entities.Add(e);
                    }
                }

这必须按以下格式转换为SQL。

declare @HierarchyLevelValue int, @HierarchyLevel nvarchar;

SELECT * from table where 
CASE 
    WHEN @HierarchyLevel='COMPANY' THEN COMPANYNUMBER
    WHEN @HierarchyLevel='BRANCH' THEN BRANCHNUMBER
    WHEN @HierarchyLevel='BUSINESS' THEN BUSINESSNUMBER
END =@HierarchyLevelValue

上面的代码适用于单个实体,但我如何实现多个像

    SELECT * from table where COMPANYNUMBER=100 AND BRANCHNUMBER= 1
 AND BUSINESSNUMBER= 1

我可以将最终查询形成为字符串并通过ExecuteSQL执行。 有没有什么方法可以避免形成字符串?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为你最好使用动态sql。 http://www.kodyaz.com/articles/tsql-sp_executesql-with-output-parameters.aspx

只是要警惕动态sql的危险。