2016-12-28 27 views
0

在我的Visual Studio(C#)解決方案中,我有一個名爲stored procedures的文件夾,其中包含大量含有T-SQL的.sql文件。使用C#將解決方案文件夾中的存儲過程添加到SQL Server數據庫中

下面是一個例子:

-- ============================================= 
-- Author:  Foo Bar 
-- Create date: 28-12-2016 
-- Description: Create XrefUsers 
-- ============================================= 
CREATE PROCEDURE [dbo].[spCreateXrefUsers] 
AS 
BEGIN 

我希望所有這些存儲過程添加到我的數據庫。

因此,我複製了所有.sql文件,將副本更名爲.tt(T4文件擴展名),並將TextTemplatingFilePreprocessor設置爲customtool。

現在,我寫了這個代碼,添加存儲過程:

public bool AddStoredProcedures() 
{ 
    try 
    { 
     //spCreateXrefUsers_sql.tt 
     CreateStoredProcedure(new spCreateXrefUsers_sql().TransformText()); 
    } 
    catch (Exception ex) 
    { 
     return false; 
    } 
    return true; 
} 

private static void CreateStoredProcedure(string spText) 
{ 
    var connectionString = MigrateHelpers.GetConnectionStringQA(); 
    //var commandText = string.Format("EXEC sp_executesql {0}", spText);     

    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     //SqlCommand command = new SqlCommand(commandText, connection); 
     SqlCommand command = new SqlCommand(spText, connection); 
     command.CommandType = CommandType.Text; 
     command.Connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
} 

,但我得到了以下錯誤:

Incorrect syntax near 'GO'.
'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.
Incorrect syntax near 'GO'.

我已閱讀:GO (Transact-SQL)

所以,我想:

spText = spText.Replace("GO", ""); 

但是,這仍然讓我與

'CREATE/ALTER PROCEDURE' must be the first statement in a query batch.

錯誤。

我應該在我的代碼中更改哪些內容以便能夠執行T-SQL?

我可能是這樣做的全部錯誤。請賜教!

也許我應該創建一個新的SQL CLR database project

當我打開Visual Studio中的.SQL文件我能執行=>手動創建存儲過程。那麼我應該可以從代碼中做到這一點嗎? enter image description here

+0

您正在使用Visual Studio數據庫項目。你知道你可以在沒有定製工具的情況下部署這些腳本,對吧? –

+0

它實際上不是VS數據庫項目。 –

+0

幾件事情,當你創建你的過程腳本時,一定要刪除(如果存在),然後創建,以便運行該腳本是可重複的,還包括任何確保正確安全所需的授權語句。然後,在查找單詞'GO'時,請理解Microsoft在腳本中的位置。請參閱鏈接https://msdn.microsoft.com/en-us/library/ms188037.aspx。聽起來就像在你的情況下,你可能有一個腳本缺少它是終止GO語句。 – Mike

回答

0

如果你正在尋找的是一種批量加載你的proc的方法,你可以從cmd行來完成。我創建了一個批處理文件,該文件在下面的文件示例中具有「sqlcmd」行。下面的cmd使用Windows身份驗證,但您可以將其更改爲使用SQL登錄。 SQLCMD中可以找到 「C:\ Program Files文件\ Microsoft SQL Server的\客戶端SDK \ ODBC \ 110 \工具\ BINN/sqlcmd.EXE」

https://msdn.microsoft.com/en-us/library/ms162773.aspx

SQLCMD -S服務器-d數據庫-E - b -m-1 -r 1 -h-1 -ic:\ temp \ spCreateXrefUsers.sql

+0

我不想使用文件路徑!我對使用文件路徑100%過敏。 –

+0

請原諒我的無知評論。我只需從C#代碼調用sqlcmd,然後將.sql文件寫入臨時文件夾並從該路徑執行。謝謝!我會看看這是否適合我。 –

相關問題