【发布时间】:2016-08-04 20:08:14
【问题描述】:
我正在尝试创建一个将列值更改为大写的 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.为什么使用 CLR 触发器而不是 tsql 触发器? 2. 为什么它的上位(sql server 不区分大小写)很重要?
-
如果有的话,你有没有这个名称的表 tblAirline,而不是尝试使用这个 tblAirline 而不是这个 [dbo].[tblAirline]
-
SQL 可能区分大小写 - 这取决于您的排序规则。在这里查看:msdn.microsoft.com/en-us/library/ms144250(v=sql.105).aspx
-
基于此问题以及您最近提出的其他 SQLCLR 问题,很明显您目前正在学习 .NET 和 SQL Server,这是基于术语、SQL Server 概念和 C# 概念的错误。您正在以错误的顺序学习这些内容:SQLCLR 在 SQL Server 中使用 .NET,因此在继续学习 SQLCLR 的高级主题之前,您需要更好地掌握 C# 和 T-SQL。当你对两者有了更好的了解后,再看看我正在写的关于 SQLCLR 的系列文章:Stairway to SQLCLR(需要免费注册)。
-
@Andez 不太可能是排序规则问题,因为此错误来自 Visual Studio / SSDT。
标签: c# sql-server triggers sqlclr