【发布时间】:2017-06-12 19:17:49
【问题描述】:
我正在运行一些动态 SQL 来查找一些表的名称。一旦我有了这些表,我就会运行一些代码来将内容插入到一个临时表中。我遇到的问题是某些表有一列 COL6。在我的临时表中,我有一个占位符,用于保存从 col1 到 col6 的所有值。但如果它只有 5 我将只插入 5 列。
不幸的是,我的代码在这两种情况下都运行。我该如何纠正这个问题?
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
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
INSERT INTO TMP_TABLE (COL1,COL2,COL3,COL4,COL5)
SELECT COL1,COL2,COL3,COL4, COL5 FROM MY_TABLE
END
在此先感谢
【问题讨论】:
-
@a_horse_with_no_name 我猜我的 sql 因为他正在使用 information_schema
-
据我了解,您要插入取决于您有多少列,如果您有 3 列,您想插入 3 列对吗?
-
正确.....它告诉我第 6 列不存在。但是如果 col 6 不存在我不想运行该插入我想运行 5 列的插入
-
我用的是MS sql server
-
如果这个问题包含了您在任何地方都忘记提及的错误消息,那么这个问题将会得到显着改善,这实际上并不表示两条线都在执行 -这是您基于错误消息的假设,但实际上并非如此。
标签: sql-server tsql cursor dynamic-sql