2011-10-10 86 views
0

有没有办法在Firebird中引用带有变量值的字段名称? 比如我想拍这样的SQL:有没有办法在Firebird中引用带有变量的字段名称

Insert into tab1 (1, f1, f2, f3) 
    select 1, tab2.f+var_loop, tab2.f+var_loop, tab2.f+var_loop 
    from tab2 
    where ..... 

其中“F”是字段名称和“var_loop”的第一个字母是一个循环变量 感谢

+0

具有连续编号气味的列就像一个非常糟糕的数据库设计。 Btw:SELECT列的列表不需要放在括号中。 –

+0

这是一个让人理解的例子。下一次想想你的头不是用你的鼻子想要的! – Wel

+0

前缀和数字**的连接将**产生像“some_name_1”,“some_name_2”,“some_name_3”这样的列名称。像这样的设计闻起来好像没有正常化。如果这是*不是*你有什么,那么你应该提供一个更好的(即有意义的)示例 –

回答

0

不,这不支持。我试图使用EXECUTE BLOCK来实现类似的效果,但是您可以立即在客户端上构建正确的SQL语句,这样会更容易...

+0

我只需要在服务器端写它 – Wel

+0

定义'服务器端'。无论如何,如果你想这样做,你需要*执行块。 –

+0

需要示例请http://stackoverflow.com/questions/7718748/how-to-reference-firled-names-with-variable-in-firebird-stored-proceder-or-execut – Wel

0

要做到这一点,你必须编写应用程序代码以在准备查询之前构建SQL。

在SQL中,在准备查询时,必须修复列的名称和数量。列名称不能基于直到运行时才评估的表达式。就我所知,这在标准SQL和每个品牌的RDBMS中都是如此。

另外,您不能在SELECT子句中的列列表周围使用括号。

+0

你错了SQL服务器有这个功能 – Wel

+0

@Welliam,你可以提供一个链接到文档或者是一个用查询执行时间来评估列名的SQL编写的例子吗?我知道在准备时间之前可以使用动态SQL来构建查询。 –

+0

是的,它是动态sql http://www.sommarskog.se/dynamic_sql.html – Wel

相关问题