在创建它之后使用表:对象不存在

时间:2009-04-24 08:19:25

标签: sql sql-server sql-server-2005 tsql ssms

我在T-SQL中有一个脚本如下:

create table TableName (...)
SET IDENTITY INSERT TableName ON

在第二行我得到错误:

无法找到对象“TableName”,因为它不存在或您没有权限。

我从Management Studio 2005执行它。当我在这两行之间放置“GO”时,它正在工作。但我想要实现的不是使用“GO”,因为我希望在完成后将此代码放在我的应用程序中。

所以我的问题是如何在不使用“GO”的情况下完成这项工作,以便我可以从我的C#应用​​程序中以编程方式运行它。

5 个答案:

答案 0 :(得分:9)

如果不以编程方式使用GO,则需要进行2次单独的数据库调用。

答案 1 :(得分:2)

依次运行两个脚本 - 使用应用程序中的两个调用。

一旦第一个成功运行,你应该只运行第二个,所以你可以运行第一个脚本,并在成功时运行第二个脚本。该表必须在您使用之前创建,这就是您需要管理工作室中的GO的原因。

答案 2 :(得分:2)

来自BOL:“ SQL Server实用程序将GO解释为他们应该将当前批处理的Transact-SQL语句发送到SQL Server ”的信号。因此,正如Jose Basilio已经指出的那样,您必须进行单独的数据库调用。 如果这可以提供帮助,我遇到了同样的问题,我必须编写一个小的(非常基本的)解析器来将一堆迷你脚本中的每个脚本分开 - 一次一个 - 发送到数据库。 / p>

答案 3 :(得分:1)

甚至比tpdi的临时表更好的是变量表。它们快速闪电,一旦超出范围就自动掉落。

这就是你如何制作一个

declare @TableName table (ColumnName int, ColumnName2 nvarchar(50))

然后插入你就这样做

insert into @TableName (ColumnName, ColumnName2)
select 1, 'A'

答案 4 :(得分:0)

考虑编写一个存储过程,创建一个临时表,然后用它做任何需要的事情。如果您创建一个真实的表,您的应用程序将无法多次运行该脚本,除非它也删除了表 - 在这种情况下,您具有临时表的功能。