【问题标题】:Implicit conversion from data type datetime to int is not allowed nested stored procedure不允许从数据类型 datetime 到 int 的隐式转换
【发布时间】:2014-06-17 15:42:24
【问题描述】:

为什么我在一个 SP 调用另一个 SP 时收到此错误。如果我调用 SP 目录,它工作得很好。

消息 257,级别 16,状态 3,过程 TEST1,第 25 行
不允许从数据类型 datetime 到 int 的隐式转换。使用 CONVERT 函数运行此查询。

SP1 -> SP

ALTER PROCEDURE [TEST].[TEST1]
    @EventId INT = NULL,
    @MemberId INT = NULL,
    @Type INT = NULL,
    @Scheduled BIT = 0,
    @DivisionId INT = NULL,
    @DivisionTeamId INT = NULL,
    @Date DATETIME = NULL,
    @GymCourtId INT = NULL
AS

开始 设置无计数; 将事务隔离级别设置为未提交;

CREATE TABLE #GridGames (
    [Id] [int] NOT NULL,
    [Number] [int] NULL,
    [Round] [int] NULL,
    [GameType] [int] NULL,
.
.
.
.
INSERT INTO #GridGames 
EXEC [TEST].[TEST] @EventId, @MemberId, @Type, @Scheduled, @DivisionId, @DivisionTeamId, @Date, @GymCourtId

SP

ALTER PROCEDURE [TEST].[TEST]
    @EventId INT = NULL,
    @MemberId INT = NULL,
    @Type INT = NULL,
    @Scheduled BIT = 0,
    @DivisionId INT = NULL,
    @DivisionTeamId INT = NULL,
    @Date DATETIME = NULL,
    @GymCourtId INT = NULL
AS
BEGIN
    DECLARE @DayAhead DATETIME;

    IF(@Date IS NOT NULL)
    BEGIN
        SET @DayAhead = DATEADD (DAY , 1 , @Date);
    END

SELECT
        game.Id,
        game.[Type] AS GameType,
        game.[Date], 

更新

第 25 行指向嵌套存储过程中的 game.[Date],但这是一个 datetime null 类型,我的临时表也有,有什么用?

【问题讨论】:

  • 也许您对#GridGames 的定义与TEST.TEST 生成的结果集不匹配?并且错误是在TEST1的第25行报告的,而不是TEST,因此TEST中的@DayAhead代码无关紧要。
  • @Damien_The_Unbeliever 是对的。检查#GridGames 的定义并将其与TEST.TEST 生成的结果的数据类型匹配
  • 该定义是从该 SP 生成的,该 SP 生成了一个具有该类型的表,因此它不可能是,而且我没有看到其他可能与 int 相关的数据时间,因为这些列都是日期时间。

标签: sql sql-server stored-procedures


【解决方案1】:

找出原因,是因为我在内部SP select语句中的参数顺序与临时表顺序不匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 1970-01-01
    • 2017-08-27
    • 2015-09-26
    相关资源
    最近更新 更多