【问题标题】:SQL Server exec command works wrongSQL Server exec 命令工作错误
【发布时间】:2016-08-24 04:26:52
【问题描述】:

我有一个存储过程spResultFlagUpd,它有两个参数@p_Code_Sazman@p_Code_Marhale。此存储过程必须使用 TRUE 和 FALSE 值更新列

ALTER PROCEDURE [dbo].[spResultFlagUpd] 
    @p_Code_Sazman  Nchar(6) = Null,
    @p_Code_Marhale Nchar(6)=Null
AS
    IF EXISTS(SELECT * FROM tblResult 
              WHERE Code_Marhale = @p_Code_Marhale  
                AND Code_Sazman = @p_Code_Sazman 
                AND Confirmed = 1 AND SendFile = 1 AND MakeFileFlag = 1)
    BEGIN
        UPDATE tblResult 
        SET MakeFileFlag = 0
        WHERE Code_Marhale = @p_Code_Marhale  
          AND Code_Sazman = @p_Code_Sazman
    END

当我跑步时

exec spResultFlagUpd @p_Code_Marhale='000060', @p_Code_Sazman='000021'

它不会更新表格。

但是当我将更新代码作为 SQL 查询运行时,它可以正常工作。

当我写代码时就像

   update tblResult 
    set MakeFileFlag=0
    where Code_Marhale=@p_Code_Marhale  and Code_Sazman=@p_Code_Sazman

正常工作

【问题讨论】:

  • 检查此查询是否返回任何结果SELECT * FROM tblResult WHERE Code_Marhale = '000060' AND Code_Sazman = '000021' AND Confirmed = 1 AND SendFile = 1 AND MakeFileFlag = 1
  • 是的,它返回 1 个唯一记录
  • 即使我右键单击 sp 并从这个窗口执行 sp 值,它也可以正常工作@Prdp
  • 添加tblResult表的样本数据。我们可以检查它的工作与否
  • 如何添加数据?我在问题中添加了表格图像的 degsin 模式

标签: sql sql-server-2008 stored-procedures execcommand


【解决方案1】:

exists 语句正在运行。问题是更新。在运行 if 之前正在编译您的代码。所以,错误发生在编译阶段。

您可以使用动态 SQL 来解决此问题:

 IF EXISTS (select * from tblResult where Code_Marhale=@p_Code_Marhale  and Code_Sazman=@p_Code_Sazman and Confirmed=1 and SendFile=1 and MakeFileFlag=1)
begin
  exec sp_execute_sql N'update tblResult set MakeFileFlag=0 where Code_Marhale=@p_Code_Marhale  and Code_Sazman=@p_Code_Sazman';
End;

用你自己的修改试试这个代码

【讨论】:

  • 我在没有 IF EXISTS 语句的情况下尝试了它,但它再次没有更新
  • @Ralis - 甚至 OP 的程序也不会抛出任何错误
  • 它在我这边工作得很好我已经使用我的表格和列运行了这个 sp,它正在工作有你缺少的东西 @mina
  • @Mina - 正如 Rails 所说,你的程序应该如预期的那样你遗漏了一些东西
  • @Ralis....... 存储过程创建不是有条件地退出更新语句。这是不正确的。如果您在创建后将存储过程脚本化,您会发现无论如何它都包含更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2021-02-02
  • 1970-01-01
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多