我已经在R中建立了连接:
conn <- dbConnect(odbc::odbc(),
Driver = "SQL Server",
Server = "...",
Database = "AdventureWorks2012")
Run Code Online (Sandbox Code Playgroud)
默认的ODBC驱动程序是AdventureWorks2012。我可以看到数据集很好,例如,以下代码可以正常运行:
dbGetQuery(conn, "SELECT TOP 10 * FROM Person.Person")
Run Code Online (Sandbox Code Playgroud)
另一方面,跑步
dbReadTable(conn, "Person.Person")
Run Code Online (Sandbox Code Playgroud)
产量:
Error: <SQL> 'SELECT * FROM "Person.Person"'
nanodbc/nanodbc.cpp:1587: 42S02: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'Person.Person'.
Run Code Online (Sandbox Code Playgroud)
相似,正在运行
data <- tbl(conn, "Person.Person")
Run Code Online (Sandbox Code Playgroud)
产量:
Error: <SQL> 'SELECT *
FROM "Person.Person" AS "zzz12"
WHERE (0 = 1)'
nanodbc/nanodbc.cpp:1587: 42S02: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'Person.Person'.
Run Code Online (Sandbox Code Playgroud)
另外,我很困惑WHERE (0 = 1):无法弄清楚它的来源!!!
(1)该表确实存在于数据库中。(2)我已经用正确的模式限定了名称。(3)我已将ODBC中的默认数据库设置为AdventureWorks2012。
感谢您的帮助和见解。谢谢 ...
> …Run Code Online (Sandbox Code Playgroud) 我刚刚通过打开ALLOW_SNAPSHOT_ISOLATION来启用更改跟踪,执行此查询以打开数据库的更改跟踪
ALTER DATABASE [DatabaseName]
SET CHANGE_TRACKING = ON (CHANGE_RETENTION = 2 DAYS,AUTO_CLEANUP = ON)
Run Code Online (Sandbox Code Playgroud)
并最终将其启用
ALTER TABLE [TableName]
ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = OFF)
Run Code Online (Sandbox Code Playgroud)
现在当我打电话时
SELECT *
FROM CHANGETABLE(CHANGES, 0)
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
对象名称“CHANGETABLE”无效。
数据库版本是SQL Server 2012。如何CHANGETABLE无效以及如何使其工作?我认为它可以开箱即用,因为它是一个系统功能。它甚至在 SQL Server Management Studio 中突出显示。我在打开更改跟踪和调用之间修改了一些数据CHANGETABLE()。
t-sql sql-server change-tracking invalid-object-name sql-server-2012
我要切换虚拟主机并备份数据库。由于新主机的某些限制,我无法还原.bak文件,只能发送给他们,以便他们还原。一旦他们恢复了它,我就运行了我的应用程序
System.Data.SqlClient.SqlException: Invalid object name "<table name>"
每当我尝试从应用程序查询表时。但是,使用相同的用户名和密码通过Management Studio登录并查询表没有问题。
我正在使用SQL Server 2008运行MVC 3站点
有谁知道为什么在尝试运行我的应用程序时为什么会出现这些异常?
编辑:
更多信息:
我在旧数据库中使用的用户名是Kimpo54321,因此我创建的所有表都带有这样的前缀Kimpo54321。因此,我尝试将其添加到我的Web应用程序中的第一个查询中,这样就可以SELECT * FROM Kimpo54321.<tablename>使查询毫无例外地通过。
现在,我不必在应用程序中的前面为每个表名加上前缀,也不想将其应用于所有查询。有没有办法解决这个问题?
编辑:
我运行此命令是为了为每个表获取一条更改模式行,并将所有内容更改为dbo它,最后使其正常工作。thnx aaron为我指出了正确的方向,找到了答案
SELECT 'ALTER SCHEMA dbo TRANSFER ' + s.Name + '.' + o.Name
FROM sys.Objects o
INNER JOIN sys.Schemas s on o.schema_id = s.schema_id
WHERE s.Name = 'yourschema'
And (o.Type = 'U' Or o.Type = 'P' Or o.Type = 'V')
Run Code Online (Sandbox Code Playgroud) sql-server asp.net exception sql-server-2008 invalid-object-name