我在SQL Server上运行此查询,但它不起作用:
SELECT * FROM dbo.marcas
但是如果我在查询中至少放置了一个字段,那就可以了。
SELECT code FROM dbo.marcas
我知道这一定很简单,但我找不到答案。
Thansk
答案 0 :(得分:3)
最有可能的是,其他人正在更新同一个表,因此会在桌面上放置某些锁。
执行SELECT * ...
时,这些锁定会导致冲突并且您的查询将无法执行,而SELECT (list of columns)......
将起作用(因为它不受锁影响)
答案 1 :(得分:1)
我正在回答我自己的问题,因为我自己找到了答案。
使用EMS Sql Manager 2008 for SQL Server我执行select * from marcas
并且没有结果,只有错误。但如果我重新创建了桌子,瞧,它工作得很好!!!
所以问题是我在服务器中创建表的方式。过了一会儿,我意识到使用ODBC在Foxpro中创建表的命令是:
oerr = sqlexec(oconn, "ALTER TABLE ["+xtabla+"] ADD ["+borrar.field_name+"] "+tipo_campo(borrar.field_type, borrar.field_len, borrar.field_dec),"")
所以改为:
oerr = sqlexec(oconn, "ALTER TABLE ["+xtabla+"] ADD ["+alltrim(borrar.field_name)+"] "+tipo_campo(borrar.field_type, borrar.field_len, borrar.field_dec),"")
也就是说,我刚刚删除了表名后面的额外空格。
多数民众赞成,“codigo”不等于“codigo”。
感谢所有试图帮助我的人。
我beleve
答案 2 :(得分:0)
一种可能性是,如果表中有一个计算列,当SQL Server尝试计算它时会产生错误。示例代码:
create function dbo.Crash ()
returns int
as
begin
return 1/0
end
go
create table dbo.cctest (
Col1 int not null,
Col2 int not null,
CrashCol as dbo.Crash()
)
go
insert into dbo.cctest (Col1,Col2)
select 1,2 union all
select 3,4
go
select Col1 from dbo.cctest
go
select * from dbo.cctest
go
结果:
Col1
----
1
3
(2 row(s) affected)
Col1 Col2 CrashCol
--------------------
(2 row(s) affected)
Msg 8134, Level 16, State 1, Line 1
Divide by zero error encountered.
所以第一个选择工作,因为它没有访问故障计算列
答案 3 :(得分:0)
我建议在除EMS之外的SQL客户端中运行查询,希望您能收到提供信息的错误消息。
“Laoperaciónenvariospasosgeneróerrores。Compruebe los valores de estado。” - > “多步操作产生错误。检查状态值。”