我正在运行一些动态SQL来查看几个表的名称。一旦我有了这些表,我就会运行一些代码将内容插入到临时表中。我遇到的问题是某些表有一列COL6。在我的临时表中,我有一个占位符,用于保存从col1到col6的所有值。但如果它只有5我将只插入5列。
不幸的是,我的代码在两种情况下运行。我怎么能纠正这个?
echo "<audio controls autoplay='autoplay'><source src='images/audio.mp3'></audio>";
非常感谢提前
答案 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;它应该没问题