如果列存在,我试图从列中选择值。
此表正在进行一些修改,删除了一些列,并将值提取到另一个表中。
我正在使用的查询在下面。在这个阶段,列可以显示或可能已经删除,所以我正在进行列检查
IF COL_LENGTH('MyTableName', 'MyColumnName') IS NOT NULL
BEGIN
INSERT INTO SOMETABLE VALUES(TITLE,TYPEID)
SELECT DISTINCT MyColumnName,2
FROM MyTableName
END
也试过
IF EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'MyColumnName'
AND Object_ID = Object_ID(N'dbo.MyTableName'))
BEGIN
INSERT INTO SOMETABLE VALUES(TITLE,TYPEID)
SELECT DISTINCT MyColumnName,2
FROM MyTableName
END
但即使列存在,也会在删除列时给出错误检查
无效的列名称“MyColumnName”
有没有办法绕过这个
答案 0 :(得分:2)
我怀疑在编译查询期间发生了错误。编译器不会考虑IF
语句,它会评估整个查询,就好像要执行所有操作一样。遇到不存在的列时,无论您是否检查是否存在,都会收到错误。我认为最好的解决方案是使用动态SQL来解决这个问题。
类似的东西:
IF COL_LENGTH('MyTableName', 'MyColumnName') IS NOT NULL
BEGIN
EXEC sys.sp_executesql N'INSERT INTO SOMETABLE VALUES(TITLE,TYPEID)
SELECT DISTINCT MyColumnName,2
FROM MyTableName'
END
答案 1 :(得分:0)
尝试:
IF EXISTS(SELECT 1 FROM sys.columns
WHERE Name = N'MyColumnName'
AND Object_ID = Object_ID(N'dbo.MyTableName'))
BEGIN
INSERT INTO SOMETABLE VALUES(TITLE,TYPEID)
SELECT DISTINCT MyColumnName,2
FROM MyTableName
END