首页 > 解决方案 > 每个表中的列名必须是唯一的。表“CONSUMO.DBO.ARCHIVOBOL082017”中的列名“MntNeto”被指定多次

问题描述

我需要创建列:'MntNeto',默认值为 '0','Not Null' 仅当它在表 CONSUMO.DBO.ARCHIVOBOL082017 中不存在时

在 Sql Server Query Analizer 中,这个字符串每次都能正常工作:

if not exists (select * from syscolumns where id=object_id('CONSUMO.DBO.ARCHIVOBOL082017') and name='MntNeto') alter table CONSUMO.DBO.ARCHIVOBOL082017 add MntNeto money default 0 not null

request.cookies("usa_bd") 值是表的名称,在本例中为:CONSUMO.DBO.ARCHIVOBOL082017

<%
set conn=server.createobject("adodb.connection")
 '********************************************
 'CONNECTION STRING **************************
%>
<!--#include file="xxxxx.asp"-->
<%
 '********************************************
 '********************************************
conn.open vamos

sqlstring = " if not exists (select * from syscolumns " &_
            " where id=object_id('" & trim(ucase(request.cookies("usa_bd"))) & "') and name='MntNeto') " &_
            " alter table " & trim(ucase(request.cookies("usa_bd"))) & " add MntNeto money default 0 not null"
            response.write sqlstring & "<br><br>"
Set RS = Conn.Execute(sqlstring)

conn.close
set conn = nothing
%>

只有当它不存在时,它才会从 asp 中创建列。如果是这样,我会收到此错误:

每个表中的列名必须是唯一的。表“CONSUMO.DBO.ARCHIVOBOL082017”中的列名“MntNeto”被指定了多次。

但是,从 Sql Query 分析器中,它每次都可以正常工作。

标签: sqlsql-server

解决方案


我知道这可能发生的唯一方法是,如果您在 dot net 应用程序中的连接没有指向CONSUMO数据库作为其初始目录。因此它正在查询syscolumns错误数据库中的表。

如果您将查询窗口的连接更改为不同的数据库,您将在 SSMS 中收到相同的错误。至少,我愿意。


推荐阅读