使用 ExecuteSqlCommand() 创建触发器抛出“‘TRIGGER’一词附近的语法不正确。”

2024-01-11

这似乎是我遗漏了一个简单的细节,我只是不明白是什么。

有了这个

string deleteTrigger =
            "IF OBJECT_ID('@p0') IS NOT NULL " +
            "DROP TRIGGER [@p1] ";
string createTrigger = 
            "CREATE TRIGGER [@p0] " +
            "ON [dbo].[@p1] " +
            "AFTER DELETE AS " +
            "BEGIN " +
                "SET NoCount ON " +
                "DELETE FROM [dbo].[MyTable] WHERE ID IN (SELECT ID FROM DELETED) " +
            "END ";

object[] parameterList = new object[] {"Tr_SomeTable_AD", "Tr_SomeTable_AD" };
context.Database.ExecuteSqlCommand(deleteTrigger,parameterList); // Works
parameterList = new object[] { "Tr_SomeTable_AD", "SomeTable" };
context.Database.ExecuteSqlCommand(createTrigger, parameterList); // Exception thrown here!

in my InitializeDatabase(DbContext)抛出异常:

SqlException:“TRIGGER”一词附近的语法不正确

在第二个ExecuteSqlCommand(第一个工作正常)。我也尝试过

context.Database.ExecuteSqlCommand(createTrigger, "Tr_SomeTable_AD", "SomeTable");

而不是使用object[],但结果是一样的。

I saw 这个问题 https://stackoverflow.com/questions/21973627/executesqlcommand-on-seed-to-create-trigger-with-entityframework-throws-sqlexcep,但答案并没有解决我的问题。我知道问题一定与我使用参数有关,因为如果我只是将值放入 createTrigger 字符串中,SQL 命令就会起作用。但是,我希望对其进行参数化,以便更轻松地在不同的表上使用相同的触发器创建代码。

解决方案:

正如 @marc_s 所说(参见下面的答案),我无法在 T-SQL 中参数化表或列(或触发器)名称 - 我必须在 C# 中创建完整的最终 T-SQL 语句(使用 string.Format() )。因此:

string deleteTrigger = "..."; // same as before
string createTrigger = 
            "CREATE TRIGGER [dbo].[{0}] " + 
            "ON [dbo].[{1}] " + ...

object[] parameterList = new object[] {"Tr_SomeTable_AD", "Tr_SomeTable_AD" };
context.Database.ExecuteSqlCommand(string.Format(deleteTrigger,parameterList)); 
parameterList = new object[] { "Tr_SomeTable_AD", "SomeTable" }; // Use string.Format() here!
context.Database.ExecuteSqlCommand(string.Format(createTrigger, parameterList));

就可以了。


You cannot在 T-SQL 中参数化表或列(或触发器)名称;不幸的是,DDL(数据定义语言)语句无法参数化。

您必须在 C# 中创建完整的最终 T-SQL 语句(使用string.Format()),然后执行整个 T-SQL 语句。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 ExecuteSqlCommand() 创建触发器抛出“‘TRIGGER’一词附近的语法不正确。” 的相关文章

  • 在C语言中使用“void”

    我很困惑为什么我们需要通过void转换为 C 函数 int f void return 0 versus int f return 0 什么是正确的做法以及为什么 In C int f 是一种老式的声明 它说f需要固定但未指定数量和类型的参
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • ASP.NET MVC 中的经典 ASP (C#)

    我有一个应用程序想要 最终 转换为 ASP NET MVC 我想要进行全面的服务升级 到 ASP NET 但想要使用当前的 ASP 内容来运行当前的功能 这样我就可以在对新框架进行增量升级的同时升级小部分 该站点严重依赖于不太成熟的 VB6
  • 迭代变量并查找特定类型实例的技术

    我想迭代进程中内存中的变量 通过插件动态加载 并查找特定类型的实例 以前我可以找到特定类型 或内存中的所有类型 我可以创建类型的实例 我可以获取作为不同类型的字段包含的实例 但我无论如何都不知道只是 搜索 特定类型的实例 一种方法是使用 W
  • 以编程方式检查页面是否需要基于 web.config 设置进行身份验证

    我想知道是否有一种方法可以检查页面是否需要基于 web config 设置进行身份验证 基本上如果有这样的节点
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • 如何配置 WebService 返回 ArrayList 而不是 Array?

    我有一个在 jax ws 上实现的 java Web 服务 此 Web 服务返回用户的通用列表 它运行得很好 Stateless name AdminToolSessionEJB RemoteBinding jndiBinding Admi
  • 从多个类访问串行端口

    我正在尝试使用串行端口在 arduino 和 C 程序之间进行通信 我对 C 编程有点陌生 该程序有多种用户控制形式 每一个都需要访问串口来发送数据 我需要做的就是从每个类的主窗体中写入串行端口 我了解如何设置和写入串行端口 这是我的 Fo
  • 暂停下载线程

    我正在用 C 编写一个非常简单的批量下载程序 该程序读取要下载的 URL 的 txt 文件 我已经设置了一个全局线程和委托来更新 GUI 按下 开始 按钮即可创建并启动该线程 我想要做的是有一个 暂停 按钮 使我能够暂停下载 直到点击 恢复
  • 如何将“外部模板”与由同一类中的模板化成员使用的嵌套类一起使用?

    首先 一些背景信息 我尝试以 Herb Sutter 在他的解决方案中介绍的方式使用 Pimpl 习语 得到了 101 http herbsutter com gotw 101 这在头文件中看起来像这样 include pimpl h h
  • 在 2D 中将一个点旋转另一个点

    我想知道当一个点相对于另一个点旋转一定角度时如何计算出新的坐标 我有一个块箭头 想要将其相对于箭头底部中间的点旋转角度 theta 这是允许我在两个屏幕控件之间绘制多边形所必需的 我无法使用和旋转图像 从我到目前为止所考虑的情况来看 使问题
  • 基于xsd模式生成xml(使用.NET)

    我想根据我的 xsd 架构 cap xsd 生成 xml 文件 我找到了这篇文章并按照说明进行操作 使用 XSD 文件生成 XML 文件 https stackoverflow com questions 6530424 generatin
  • 无法将类型“System.IO.Stream”隐式转换为“Java.IO.InputStream”

    我提到了一些类似的问题 但没有一个涉及IO 当我使用时 我在java中使用了相同的代码Eclipse 那次就成功了 但现在我尝试在中使用这段代码Mono for Android C 它不起作用 我正在尝试运行此代码来创建一个InputStr
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 当我“绘制”线条时,如何将点平均分配到 LineRenderer 的宽度曲线?

    我正在使用线条渲染器创建一个 绘图 应用程序 现在我尝试使用线条渲染器上的宽度曲线启用笔压 问题在于 AnimationCurve 的 时间 值 水平轴 从 0 标准化为 1 因此我不能在每次添加位置时都在其末尾添加一个值 除非有一个我不知
  • 剪贴板在 .NET 3.5 和 4 中的行为有所不同,但为什么呢?

    我们最近将一个非常大的项目从 NET Framework 3 5 升级到 4 最初一切似乎都工作正常 但现在复制粘贴操作开始出现错误 我已经成功制作了一个小型的可复制应用程序 它显示了 NET 3 5 和 4 中的不同行为 我还找到了一种解
  • 什么是 __declspec 以及何时需要使用它?

    我见过这样的例子 declspec在我正在阅读的代码中 它是什么 我什么时候需要使用这个构造 这是 Microsoft 对 C 语言的特定扩展 它允许您使用存储类信息来赋予类型或函数属性 文档 declspec C https learn
  • 运算符“==”不能应用于“int”和“string”类型的操作数

    我正在编写一个程序 我想到了一个数字 然后计算机猜测了它 我一边尝试一边测试它 但我不断收到不应该出现的错误 错误是主题标题 我使用 Int Parse 来转换我的字符串 但我不知道为什么会收到错误 我知道它说 不能与整数一起使用 但我在网
  • 我在在线程序挑战编译器中遇到演示错误

    include
  • 使用 C# 从 DateTime 获取日期

    愚蠢的问题 给定日期时间中的日期 我知道它是星期二 例如我如何知道它的 tue 2 和 mon 1 等 Thanks 您正在寻找星期几 http msdn microsoft com en us library system datetim

随机推荐

  • 如何让 Django-Ajax-Selects 在 Django Admin 中工作?

    Django Ajax 选择 http code google com p django ajax selects 这是我所做的 但无济于事 Added ajax select to my INSTALLED APPS in setting
  • 6 个位置内 3 个元素的排列

    我正在寻找排列 或组合 c a b c 在始终具有具有替代元素的序列的条件下的六个位置内 例如abcbab 排列可以很容易地得到 abc lt c a b c permutations n 3 r 6 v abc repeats allow
  • 为什么使用分号时 JavaScript 不被解释为代码块?

    In Chrome版本 72如果我运行以下命令JavaScript没有错误 prop p prop prop gt gt prop prop 因此 这行代码意外地被解释为表达式语句 但是 如果我在末尾运行相同的代码并带有分号 它将按预期运行
  • 为什么我们不能检查react-native应用程序的样式属性?

    我想检查元素的颜色是否为白色 如下所示 if styles background white console log ok console log styles background white gt was false 1 为什么 1 返
  • DBMS_STANDARD 包的过程和/或函数是否应该在 PL/SQL 代码中使用?

    最近 我遇到了一个BEFORE INSERT OR UPDATE在桌子上触发 在这个触发器中 作者依赖于INSERTING and UPDATING函数 都返回一个BOOLEAN 的DBMS STANDARD包来确定触发器是在插入之前还是更
  • Typekit 脚本缓慢/无响应/卡住

    我在我的网站上安装了 typekit 通常在开头的 head 标签后面有两行 js 但加载字体非常慢 无响应 这可以通过刷新页面来完全解决 之后 typekit 字体完美地加载迅速地 但从用户的角度来看 他们永远不会知道要这样做 因此他们将
  • Django South - 表已经存在

    我正在尝试从南方开始 我有一个现有的数据库 我添加了南 syncdb schemamigration initial 然后 我更新了models py添加一个字段并运行 manage py schemamigration myapp aut
  • 结构指令、位置工具提示

    我创建了一个结构指令 当我将鼠标悬停在文本 see tooltip 上时 该指令会根据 ng template 内的内容显示工具提示 工具提示显示正确 但它显示在屏幕的 top 0px left 0px 位置 我希望它显示在文本 see t
  • 带有标题栏和 Windows 任务栏的 Tkinter 窗口

    我已经广泛搜索这个问题 但似乎没有人知道 我在 python 2 7 中创建了一个简单的 tkinter 窗口 tcl 8 5 并希望它最大化 就像我点击右上角的最大化按钮一样 使用 fullscreenoption 不是一个选项 因为它删
  • Eclipse、Java:如何导入 zip 格式的库?

    好吧 这是基本的 但似乎正常的方法对我来说不起作用 我正在尝试导入 jSSC 库 用于与串行端口等进行通信 最新的库是 jSSC 0 9 0 Release 所以 我尝试了以下方法 将 zip 文件放置在工作区中 并将其添加为项目属性 gt
  • 从 Python 子进程执行 shell 脚本

    我需要从 python 调用 shell 脚本 问题是 shell 脚本在完成之前会问几个问题 我找不到使用的方法subprocess 使用pexpect似乎有点过头了 因为我只需要启动它并向它发送几个 是 请不要建议需要修改 shell
  • eclipse 外部工具配置 -> 类路径中引用的库不存在:org.eclipse.swt

    更新到最新的 eclipse mars 版本后 版本 Mars 候选版本 1 4 5 0RC1 内部版本号 20150521 1252 我无法启动任何 Ant 脚本 它总是会导致以下错误 首先我检查路径是否真的正确 并确保特定的jarorg
  • 将轮廓路径转换为 ​​svg 路径

    我正在使用 openCV 和 python 从图像中提取轮廓 现在我需要将这些轮廓路径 列表 导出为 svg 路径 我怎样才能做到这一点 code ret thresh cv2 threshold imgray 27 25 0 contou
  • 如何生成“随机”但又“唯一”的数字?

    随机数是如何生成的 java等语言如何生成随机数 特别是GUID是如何生成的 我发现像伪随机数生成器这样的算法使用初始值 但我需要创建一个随机数程序 其中一旦出现的数字就永远不会重复 即使系统重新启动等也是如此 我认为我需要将这些值存储在任
  • 从 firebase 数据库检索数据到 textview 时如何创建换行符?

    我知道如果我想创建一个新行 我必须插入 n无论我需要在哪里创建该线 但我得到的是没有我在 firebase 数据库中已有的行的文本 有人可以告诉我如何解决这个问题吗 例如 如果我在数据库中有 hello n world 我明白了hello
  • jqGrid 自定义编辑对话框

    我正在开发一个使用 jqGrid 的应用程序 问题是在行编辑时出现的编辑对话框必须具有特定的布局 所以我更愿意通过ajax加载它 然后手动将数据发送回jqGrid 我在论坛上搜索了很多 但找不到如何执行此操作的示例 因此 我只需要 jqGr
  • 如何确定应用程序包中是否存在文件?

    抱歉 今天的第二个问题很愚蠢 是否可以确定应用程序包中是否包含文件 我可以毫无问题地访问文件 即 NSString pathAndFileName NSBundle mainBundle pathForResource fileName o
  • SQL ON DELETE CASCADE,删除以哪种方式发生?

    如果我在数据库中有两个关系 如下所示 CREATE TABLE Courses CourseID int NOT NULL PRIMARY KEY Course VARCHAR 63 NOT NULL UNIQUE Code CHAR 4
  • 在位图android上添加水效果

    如何在位图图像中添加水波 我在这里发现了触摸事件的水波纹效果 https github com esteewhy whater https github com esteewhy whater但无法在我的单个位图上实现 谁能帮忙在我的位图上
  • 使用 ExecuteSqlCommand() 创建触发器抛出“‘TRIGGER’一词附近的语法不正确。”

    这似乎是我遗漏了一个简单的细节 我只是不明白是什么 有了这个 string deleteTrigger IF OBJECT ID p0 IS NOT NULL DROP TRIGGER p1 string createTrigger CRE