我正在尝试创建一个将列值更改为大写的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();
}
}
我错过了什么?
答案 0 :(得分:2)
错误消息来自Visual Studio / SSDT。
错误的最可能原因是项目中定义了Target
属性的SqlTrigger
属性中引用的表。您需要向项目“添加新项目”,然后选择“表格”。完全按照数据库中存在的表tblAirline
添加,因为在部署时任何差异都会传播到数据库。
其他说明:
new SqlConnection
实例放在using(){ }
构造内,因为它是一次性对象。new SqlCommand
实例放在using(){ }
构造内,因为它是一次性对象。tbl
为表名添加前缀。这种不良做法没有好处。您也不应使用v
或vw
或其他任何内容为视图名称添加前缀。