为什么SQL执行这两行

时间:2017-01-27 06:52:20

标签: sql-server tsql cursor dynamic-sql

我正在运行一些动态SQL来查看几个表的名称。一旦我有了这些表,我就会运行一些代码将内容插入到临时表中。我遇到的问题是某些表有一列COL6。在我的临时表中,我有一个占位符,用于保存从col1到col6的所有值。但如果它只有5我将只插入5列。

不幸的是,我的代码在两种情况下运行。我怎么能纠正这个?

 echo "<audio controls autoplay='autoplay'><source src='images/audio.mp3'></audio>";

非常感谢提前

2 个答案:

答案 0 :(得分:2)

你误解了一些事情。代码根本不是正在运行。当COL6不存在时,您收到编译错误。作为类比,考虑一个C#函数,首先通过反射检查一个类是否具有某个成员函数,然后尝试直接在该类型的变量上调用该函数 - 如果该类不具有 那个函数,你会得到一个编译器错误。

因此,相反,您必须避免编译依赖于特定元数据查找的代码,直到您获得该查找的结果:

IF EXISTS(SELECT * FROM information_schema.COLUMNS 
WHERE  TABLE_NAME =     'MY_TABLE' AND COLUMN_NAME = 'COL6')
BEGIN
  --if my table has col 6 I want this to run
   EXEC('INSERT INTO TMP_TABLE (COL1,COL2,COL3,COL4,COL5,COL6)
         SELECT COL1,COL2,COL3,COL4,COL5,COL6 FROM MY_TABLE')
END
ELSE 
BEGIN
   --If it does not I want this to run
    EXEC('INSERT INTO TMP_TABLE (COL1,COL2,COL3,COL4,COL5)
          SELECT COL1,COL2,COL3,COL4, COL5 FROM MY_TABLE')
END

(你可能不必同样保护ELSE部分,因为它可以编译任何一种方式,但我通常只是为了对称而这样做)

答案 1 :(得分:1)

即使您只想插入5列,也可以选择6.在&#34中选择5列;否则&#34;它应该没问题