mysql - 使用链接 DB 中的另一个 SP 执行 SP

标签 mysql sql-server tsql stored-procedures exec

我尝试使用链接的数据库代码中的另一个 SP 执行存储过程(SP),工作顺利,没有错误,但它不会在我的表中插入数据。

这是存储过程的代码

USE [MYDB] 
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[MYDB_SP] 
@ReportDate         smalldatetime ='19000101'
AS
IF(@ReportDate = '19000101')
SELECT @ReportDate = convert(varchar(10), GETDATE(), 112)

BEGIN
SELECT * 
INTO #MYDBTABLETMP
FROM MYDBTABLE 

INSERT INTO #MYDBTABLETMP       
   ([DATAAREAID]
   ,[REPORTDATE]
   ,[ACCOUNTNUM]       
   ,[NAME]
   ,[CUSTGROUP]
   ,[CURRENCYCODE]
   ,[TOTAL])
((select SPTABLE.[DATAAREAID] 
,SPTABLE.[REPORTDATE]
   ,SPTABLE.[ACCOUNTNUM]
   ,SPTABLE.[NAME]
   ,SPTABLE.[CUSTGROUP]
   ,SPTABLE.[CURRENCYCODE]
   ,SPTABLE.[TOTAL]    
   FROM OPENROWSET('SQLOLEDB','LINKEDSERVER'; 'USERNAM' ; 'PASSWORD' ,
'SET FMTONLY OFF; SET NOCOUNT ON; exec LINKEDDB.LINKEDDB_SP 1,''20161201'' ') as SPTABLE))

delete MYDBTABLE where DATAAREAID = 'AAA'

INSERT INTO MYDBTABLE 
SELECT * FROM #MYDBTABLETMP WHERE DATAAREAID = 'AAA'

DROP TABLE #ERPCUSTAGINGTMP 
END

最佳答案

尝试将插入到过程中(= BEGIN 和 END 之间):

IF(@ReportDate = '19000101')
SELECT @ReportDate = convert(varchar(10), GETDATE(), 112)

现在你的脚本还没有到达开始。并仅创建第一个语句集作为您的过程。

ALTER PROCEDURE [dbo].[MYDB_SP] 
@ReportDate         smalldatetime ='19000101'
AS
BEGIN
    IF(@ReportDate = '19000101')
         SELECT @ReportDate = convert(varchar(10), GETDATE(), 112)
    ...
END

关于mysql - 使用链接 DB 中的另一个 SP 执行 SP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41297047/

相关文章:

sql-server - 同一列上具有多个聚合的 T-SQL Pivot

javascript - 如何在我的侧边栏悬停时制作动态下拉菜单?

mysql 在加载数据时去除 unicode 斜杠

php - 向 mySQL 提交重复主菜的表单和两封带有 php 函数 mail() 的电子邮件

asp.net - 在 SELECT 子句中显示不同 COUNT 的存储过程

entity-framework - 如何在 Entity Framework 5 中增加/减少多用户安全

mysql - 自定义子选择请求和 MySQL 的 where 子句

c# - 从外部或变量传递表名到 INSERT INTO 表名?

sql-server - 比较从 Oracle 到 SQL Server 的数百万条记录

sql - 如何拥有引用另一个表的检查约束?