SQL Server错误:插入时出现无效对象名称

3

我有这条INSERT语句:

INSERT INTO TBL_VIDEOS (
  TBL_VIDEOS.ID,
  TBL_VIDEOS.TITLE,
  TBL_VIDEOS.V_DESCRIPTION,
  TBL_VIDEOS.UPLOAD_DATE,
  TBL_VIDEOS.V_VIEWS,
  TBL_VIDEOS.USERNAME,
  TBL_VIDEOS.RATING,
  TBL_VIDEOS.V_SOURCE,
  TBL_VIDEOS.FLAG
) 
VALUES 
('Z8MTRH3LmTVm',
'Why Creativity is the New Economy',
'Dr Richard Florida, one of the world's leading ...
    this stuff does not matter, it is just wasted space',
CURRENT_TIMESTAMP,
0,
1,
0,
'http://www.youtube.com/watch?v=VPX7gowr2vE&feature=g-all-u'
,0)

但是我收到了以下错误信息:

"TBL_VIDEOS"对象名称无效


1
您需要转义特殊或保留字符。 - juergen d
1
除了在列列表中修复表前缀和单引号之外,你尝试过 dbo.TBL_VIDEOS 吗? - Aaron Bertrand
3
你确定你在正确的数据库中吗?使用 SELECT ID FROM TBL_VIDEOS 是否会出现相同的错误? - Aaron Bertrand
6个回答

2

请从这部分中删除TBL_VIDEOS

INSERT INTO TBL_VIDEOS (
  TBL_VIDEOS.ID,
  TBL_VIDEOS.TITLE,
  TBL_VIDEOS.V_DESCRIPTION,
  TBL_VIDEOS.UPLOAD_DATE,
  TBL_VIDEOS.V_VIEWS,
  TBL_VIDEOS.USERNAME,
  TBL_VIDEOS.RATING,
  TBL_VIDEOS.V_SOURCE,
  TBL_VIDEOS.FLAG
) 

应该是

INSERT INTO TBL_VIDEOS (
  ID,
  TITLE,
  V_DESCRIPTION,
  UPLOAD_DATE,
  V_VIEWS,
  USERNAME,
  RATING,
  V_SOURCE,
  FLAG
  )

您可以查看此内容,任何类似于世界领先专家的内容都应更改为世界''领先专家。通过两次单引号来转义单引号。


1
仍然出现错误..顺便说一下,我的文本中没有引用“世界领先的专家”。 - thormayer
你尝试过评论中@AaronBertrand提到的方法了吗?同时请验证一下你的表名拼写是否正确。有时候我们认为是VIDEO但实际上是VEDIO - codingbiz

2

您需要在描述中转义单引号:"one of the world's leading experts"

我认为表格名称不是问题,但它们是冗余的。

以下内容有效:

create table TBL_VIDEOS (
ID nvarchar(100), TITLE nvarchar(100), V_DESCRIPTION nvarchar(2000), UPLOAD_DATE nvarchar(100), V_VIEWS nvarchar(100), USERNAME nvarchar(100), RATING nvarchar(100), V_SOURCE nvarchar(100), FLAG nvarchar(100)
)

INSERT INTO TBL_VIDEOS ( 

 TBL_VIDEOS.ID, TBL_VIDEOS.TITLE, TBL_VIDEOS.V_DESCRIPTION, TBL_VIDEOS.UPLOAD_DATE, TBL_VIDEOS.V_VIEWS, TBL_VIDEOS.USERNAME, TBL_VIDEOS.RATING, TBL_VIDEOS.V_SOURCE, TBL_VIDEOS.FLAG) 

VALUES 

('Z8MTRH3LmTVm', 'Why Creativity is the New Economy', 'Dr Richard Florida, one of the world' + CHAR(39) + 's leading experts on economic competitiveness, demographic trends and cultural and technological innovation shows how developing the full human and creative capabilities of each individual, combined with institutional supports such as commercial innovation and new industry, will put us back on the path to economic and social prosperity.

Listen to the podcast of the full event including audience Q&A: http://www.thersa.org/events/audio-and-past-events/2012/why-creativity-is-the-new-economy

Our events are made possible with the support of our Fellowship. Support us by donating or applying to become a Fellow.

Donate: http://www.thersa.org/support-the-rsa Become a Fellow: http://www.thersa.org/fellowship/apply', CURRENT_TIMESTAMP, 0, 1, 0, 'http://www.youtube.com/watch?v=VPX7gowr2vE&feature=g-all-u' ,0)

@CodingBiz(我不能评论你的答案,因为我太新了):删除列名会是更好的实践,但这不是问题所在。我相信这是因为他没有转义或者用其ASCII等价物替换单引号所导致的。 - NicVerAZ
我无法在这里更改它,但我已经使用HTML编码进行了转义。在我的数据库语句中,引号表示为'。 - thormayer
尝试通过从列列表中删除表名(无需模式标记)来重新编码,将每个列对齐到自己的行上(这样可以进行计数)。插入的另一种方法是使用select语句。仅突出显示select语句允许您执行它并确保返回正确数量的列的结果集。 - NicVerAZ
您可能还想对表名进行模式签名。我曾看到有人在自己的用户名模式下创建表,引擎会首先尝试插入到该表中,而不是正确的表中。我猜dbo.TBL_VIDEOS将是您的模式签名表名。您真的需要始终包含模式。这也极大地帮助了IntelliSense。 - NicVerAZ

1
确保您已添加: USE 您的数据库名称

1
在我的情况下,SQL Server不喜欢在COLUMNS部分使用单引号,也不喜欢在VALUES部分使用双引号。

错误的写法

INSERT INTO [sample].[dbo].[users]
('username', 'password')
VALUES('hello', 'hello')

INSERT INTO [sample].[dbo].[users]
("username", "password")
VALUES("hello", "world")

正确

INSERT INTO [sample].[dbo].[users]
("username", "password")
VALUES('hello', 'world')

0
在我的情况下,当尝试使用以下语句插入值时,SQL会给出“无效对象名称”错误消息:
IF NOT EXISTS (SELECT 1 FROM [DatabaseName].[SchemaName].[TableName] 
WITH (NOLOCK) WHERE col1 = val1)
BEGIN
  INSERT INTO [SchemaName].[TableName] (col1, col2,col3) 
  Values(val1, val2, val3)
END

为了避免这个错误,我使用以下语句将记录插入表中:
IF NOT EXISTS (SELECT 1 FROM [DatabaseName].[SchemaName].[TableName] 
WITH (NOLOCK) WHERE col1 = val1)
BEGIN
   INSERT INTO SchemaName.TableName (col1, col2,col3) 
   Values(val1, val2, val3)
END

0

尝试进行硬刷新 Ctrl+Shift+R

在刚创建表后,您可能需要允许SSMS识别该表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接