2013-11-01 59 views
0

我有一個場景,需要我首先將表中某列值的範圍設置爲Null,然後添加重新計算的邏輯Update聲明之後的新NULL值與Update聲明。最後,我運行我的最終比較腳本(在遊標內),它將新值插入表中。在SQL Server 2008 R2上的單個存儲過程中使用更新,刪除和插入語句

我是否需要在每個主要命令之間使用GO命令?

例子:

Drop Table1 

Update Table2 
Set Col1=NULL,Col2=NULL 

Insert into Table3 (Col1,Col2) 

使用GO每個語句之間的要求,因爲有時這工作,但最近它已經給我的問題是什麼?

謝謝,

+7

'GO'不是SQL Server語句並且不能出現在存儲過程中。這是一些/大多數SQL Server *客戶機*工具可識別的(默認)批分隔符,並用於將他們發送*到* SQL Server的內容拆分爲單獨的批處理。 –

+2

你爲什麼覺得你需要一個光標? –

回答

1

如上所述,GO不是SQL語法,但SSMS隔板。

如果您確實需要在單個SP中執行所有這些操作,則可以使用動態SQL。 The're兩種能力在SQL服務器」 sp_executesqlexecute (command)執行動態SQL

根據動態SQL的更多信息可以在這裏找到:http://www.sommarskog.se/dynamic_sql.html或在這裏:http://www.codeproject.com/Articles/20815/Building-Dynamic-SQL-In-a-Stored-Procedure

在這種情況下,你的腳本會像下面:

create proc myProc 
as 
declare @sql nvarchar(max); 

set @sql = N'Drop Table1'; 
exec sp_executesql @sql; 

set @sql = N'Update Table2 
Set Col1=NULL,Col2=NULL'; 
exec sp_executesql @sql; 

set @sql = N'Insert into Table3 (Col1,Col2)'; 
exec sp_executesql @sql; 
go 

但需要檢查,如果你真的需要以上述方式提到執行上述操作...

相關問題