我在T-SQL中有一个脚本如下:
create table TableName (...)
SET IDENTITY INSERT TableName ON
在第二行我得到错误:
无法找到对象“TableName”,因为它不存在或您没有权限。
我从Management Studio 2005执行它。当我在这两行之间放置“GO”时,它正在工作。但我想要实现的不是使用“GO”,因为我希望在完成后将此代码放在我的应用程序中。
所以我的问题是如何在不使用“GO”的情况下完成这项工作,以便我可以从我的C#应用程序中以编程方式运行它。
答案 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)
考虑编写一个存储过程,创建一个临时表,然后用它做任何需要的事情。如果您创建一个真实的表,您的应用程序将无法多次运行该脚本,除非它也删除了表 - 在这种情况下,您具有临时表的功能。