为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: V8
【操作系统】:Win11
【CPU】:
【问题描述】*:
需要为自增列赋值(从其他表复制数据),则需要 SET IDENTITY_INSERT {tableName} ON;
如果在执行时表中没有自增列则会出错,而且{tableName}是运行时才能确定的,是否有办法通过SQL确认表中是否包含自增列?
或者是否有其他办法可以赋值(因为表很多,不想逐一手动确认表中是否有自增列)
类似于
SQL SERVER:
IF OBJECTPROPERTY(OBJECT_ID(‘{tableName}’),‘TableHasIdentity’)=1 BEGIN SET IDENTITY_INSERT {tableName} ON END;
感谢@Song Junjie回复
参考你提供的语句写了如下查询:
new DmCommand($“BEGIN IF EXISTS (SELECT S.NAME,C.NAME FROM SYSOBJECTS S, SYSCOLUMNS C WHERE S.ID=C.ID AND C.INFO2 =1 AND S.NAME = ‘{tableName}’) THEN SET IDENTITY_INSERT “{tableName}” ON; END IF; END;”, connection).ExecuteNonQuery();
仍然会出现:表 *** 不存在IDENTITY列 的错误
只好拆成了两条语句执行,执行成功:
var hasIdentity = (long)new DmCommand($“SELECT COUNT(*) FROM SYSOBJECTS S, SYSCOLUMNS C WHERE S.ID=C.ID AND C.INFO2 =1 AND S.NAME = ‘{tableName}’;”, connection).ExecuteScalar() > 0;
if (hasIdentity)
{
new DmCommand($“SET IDENTITY_INSERT “{tableName}” ON;”, connection).ExecuteNonQuery();
}
对相关的SQL语句不熟悉,感觉IF EXISTS没有正确使用。
您好,可通过该sql进行判断哪张表哪个字段是自增列: