2016-04-13 55 views
0

我正在嘗試創建一個將列值更改爲大寫的CLR觸發器。 但是當我嘗試建立我獲取文件如下:CLR觸發無法解析的參考錯誤

Severity Code Description Project File Line Suppression State 
Error  SQL71501: Trigger: [dbo].[UpperTrigger] has an unresolved reference to object [dbo].[tblAirline]. TravelSight \\mac\home\documents\visual studio 2015\Projects\TravelSight\TravelSight\obj\Debug\TRAVELSIGHT.generated.sql 33 

我的CLR代碼如下:

using System; 
using System.Data; 
using System.Data.SqlClient; 
using Microsoft.SqlServer.Server; 

public partial class Triggers 
{ 
    // Enter existing table or view for the target and uncomment the attribute line 
    [Microsoft.SqlServer.Server.SqlTrigger(Name = "UpperTrigger", Target = "[dbo].[tblAirline]", Event = "AFTER INSERT, UPDATE")] 
    public static void UpperTrigger() 
    { 
     // Open connection for context 
     SqlConnection conn = new SqlConnection(); 
     conn.ConnectionString = "Context Connection=true"; 

     // Create command object 
     SqlCommand command = new SqlCommand(); 
     command.Connection = conn; 

     // Create string that defines sql statement 
     string sql = 
     "Update tblAirline " + 
     "SET AirlineName = UPPER(AirlineName) " + 
     "WHERE AirlineID IN(SELECT AirlineID FROM Inserted)"; 
     command.CommandText = sql; 

     // Exec command object 
     command.ExecuteNonQuery(); 

     // Close connection object 
     conn.Close(); 

    } 
} 

有什麼我錯過了嗎?

+1

1.爲什麼使用與tsql觸發器相反的CLR觸發器? 2.爲什麼它的上層(sql server不區分大小寫)很重要? – Wjdavis5

+0

你是否有這個名字爲tblAirline的表,如果是,請嘗試使用此tblAirline而不是[dbo]。[tblAirline] – rashfmnb

+2

SQL可以區分大小寫 - 這取決於您的歸類。點擊這裏:https://msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx – Andez

回答

1

錯誤消息來自Visual Studio/SSDT。

錯誤的最可能原因是在項目中定義了SqlTrigger屬性的Target屬性中引用的表。您需要將「添加新項目」添加到項目中,然後選擇「表格」。添加表tblAirline與數據庫中存在的完全相同,因爲在部署時,任何差異都會傳播到數據庫。

其他說明:

  • 請把new SqlConnection實例化一個using(){ }結構的內部,因爲它是一次性的對象。
  • 請將new SqlCommand實例化爲using(){ }構造,因爲它是一個可丟棄的對象。
  • 最好是停止在tbl前綴表名稱。這種不好的做法沒有好處。你也不應該使用vvw或任何其他名稱來加前綴視圖名稱。
  • 請不要使用SQLCLR除了調用T-SQL。我當然希望這是一個課堂練習/作業,並且從不打算實際上在某天生產,因爲它比在此觸發器中執行的簡單T-SQL查詢更難以維護。
+0

this只是一個學習clr觸發器的訓練練習 – user2371684