2

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

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

在第二行我得到错误:

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

我从 Management Studio 2005 执行它。当我在这两行之间加上“GO”时,它就可以工作了。但我想要完成的是不要使用“GO”,因为我想在它完成时将此代码放在我的应用程序中。

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

4

5 回答 5

9

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

于 2009-04-24T08:21:59.433 回答
2

一个接一个地运行这两个脚本 - 使用来自您的应用程序的两个调用。

无论如何,您应该只在第一个成功运行后才运行第二个,因此您可以运行第一个脚本并成功运行第二个脚本。必须先创建表才能使用它,这就是为什么需要管理工作室中的 GO。

于 2009-04-24T08:23:28.353 回答
2

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

于 2009-04-24T09:12:08.253 回答
1

比 tpdi 的临时表更好的是变量表。它们以闪电般的速度运行,一旦超出范围就会自动掉落。

这就是你制作的方法

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

然后插入你就这样做

insert into @TableName (ColumnName, ColumnName2)
select 1, 'A'
于 2009-04-24T21:25:45.340 回答
0

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

于 2009-04-24T08:35:48.450 回答