gpt4 book ai didi

sql-server - 存储过程适用于 SQL Server 2000,但不适用于 SQL Server 2008R2

转载 作者:行者123 更新时间:2023-12-02 23:59:04 24 4
gpt4 key购买 nike

我将数据库从 SQL Server 2000 转移到 SQL Server 2008 R2 SP2,除了一个存储过程外,所有工作都正常。错误出现在以下代码段中:

declare @Dates table (
ForDate smalldatetime,
DayStart int,
PRIMARY KEY CLUSTERED (ForDate)
)

INSERT INTO @Dates
SELECT M.ForDate
FROM @Master M
GROUP BY M.ForDate

错误是:

Msg 213, Level 16, State 1, Procedure REP_Media, Line 115
Column name or number of supplied values does not match table definition.

我意识到发生错误是因为没有为 @Dates 表变量中的 DayStart 列提供值。我可以将 NULL 添加到内部选择中,一切正常。

但是相同的过程适用于 SQL Server 2000,而不适用于 SQL Server 2008 R2 SP2,为什么?在不更改程序(某些服务器选项或其他解决方案)的情况下应该做什么才能正常操作?

我尝试在过程定义和数据库选项中使用SET ANSI_NULL_DFLT_ON ON,但没有成功。

最佳答案

除了更新 SQL 之外,您无能为力。

最近版本中的 SQL Server 根本不允许您使用 SELECT 列表中的项目少于列列表中的项目来执行 insert...select 。您没有明确的列列表,因此它隐含为除身份、时间戳、计算之外的所有列。

(ForDate,DayStart)

即使 DayStart 可为空,您仍然需要更改语法以使用显式列列表,以便从单列 SELECT 源应用该列表

INSERT INTO @Dates (ForDate)
SELECT M.ForDate
FROM @Master M
GROUP BY M.ForDate

这似乎是一个 change in behaviour来自 SQL Server 2000(也 found her e),但我没有看到 2000 的行为 documented并且使用 SQL Server 2000 兼容模式也没有帮助。

关于sql-server - 存储过程适用于 SQL Server 2000,但不适用于 SQL Server 2008R2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37831354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com