【发布时间】:2016-10-16 07:51:53
【问题描述】:
我将数据库从 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
错误是:
消息 213,级别 16,状态 1,过程 REP_Media,第 115 行
列名或提供的值的数量与表定义不匹配。
我意识到发生错误是因为没有为@Dates 表变量中的列DayStart 提供值。我可以将 NULL 添加到内部选择中,一切正常。
但是相同的过程在 SQL Server 2000 上有效,而在 SQL Server 2008 R2 SP2 上无效,为什么?在不改变程序(某些服务器选项或其他解决方案)的情况下正常运行应该做什么?
我尝试在过程定义和数据库选项中使用SET ANSI_NULL_DFLT_ON ON,但没有任何成功。
【问题讨论】:
-
好吧,写这样的插入语句是很糟糕的做法。在编写插入语句时,您应该始终指定列列表。
-
很遗憾,这不是我的代码,这样的请求可能会出现在使用数据库的应用程序的其他任何地方。
标签: sql-server sql-server-2008 stored-procedures sql-server-2000