【问题标题】:How to test Sql server 2005 queries when you have 2008 r2 installed安装 2008 r2 后如何测试 Sql server 2005 查询
【发布时间】:2013-03-14 15:33:52
【问题描述】:

我已经安装了 sql server 2008 r2 Management studio,但是服务器有 sql server 2005 数据库。有什么原因我可以测试我在 sql server 2008 中编写的将在 sql server 2005 上运行的查询。

我的示例查询在 sql server 2008 中有效,但在 2005 年无效。

CREATE TABLE #Tmp
(
    NoOfMembers int,
    AverageAge int
)
insert into #Tmp(NoOfMembers,AverageAge)       

Values((Select Count(*)NoOfMembers  From Customer where Confirmed = 1),
(Select AVG(CONVERT(int,Age)) AverageAge From Customer where Confirmed = 1)
)
select * From #Tmp

任何帮助 提前感谢

【问题讨论】:

  • 错误信息是什么?因为这个查询在 SQL Server 2008 中运行良好
  • @PraveenNambiar 他说他的查询在2005年不起作用,2008年就可以了。
  • @PraveenNambiar 是的,我的查询在 2008 年有效,但在 2005 年无效。
  • 是的...知道了...看我的回答

标签: sql-server-2008 sql-server-2005


【解决方案1】:

您可以针对 2005 sql server 使用 sql 2008 management studio,而不会出现问题。如果您的 SQL 语句针对数据库触发并且在 sql 2005 中不起作用,则服务器将回答错误消息。

如果您有一个 sql 2008 并且想要针对 2005 进行测试,您可以将兼容模式设置为 2005,这样也可以。

您发布的 sql 语句希望在值部分使用子查询。这在 sql2005 上不起作用并产生错误。如果您在 2005 年需要它,请创建一个标量函数,例如并改用它。

编辑: 好吧,如果你想在没有VALUESstatement 的情况下使用 sql 将数据插入表中,你可以这样做:

CREATE TABLE #Tmp
(
    NoOfMembers int,
    AverageAge int
)

INSERT INTO #Tmp(NoOfMembers,AverageAge)       
SELECT COUNT(*), AVG(CONVERT(int,Age)) 
FROM Customer WHERE Confirmed = 1

SELECT * FROM #Tmp

【讨论】:

  • 感谢您的快速回答@YvesR 我已在 sql 2008 中将兼容模式设置为 2005,但它仍然运行此查询。如何克服这个问题,因为正如您还提到的,它不会在 sql 2005 中执行,但在我的场景中仍然可以正常工作。
  • 如果我在 2005 年运行您的查询,它会失败,因为这里不支持子选择查询,在 2008 年一切正常。在 2005 上,您可以改用标量函数。
  • 感谢您的回复。我明白了:)
【解决方案2】:

这就是你如何让它在SQL Server 2005上工作。

CREATE TABLE #Tmp
(
    NoOfMembers int,
    AverageAge int
)

insert into #Tmp(NoOfMembers,AverageAge)       
    (Select Count(*), AVG(CONVERT(int,Age)) From Customer where Confirmed = 1)

select * From #Tmp

【讨论】:

  • "在此上下文中不允许子查询。只允许标量表达式。"这是我在 sql server 2005 中运行此查询时遇到的错误。我的问题不是关于在 sql server 2005 中的工作,而是关于在 sql 2008 中打开 2005 兼容性的选项。
  • 我不小心添加了一个额外的 ')'......现在试试这个......它会工作......它在我的 2005 实例上工作。
  • 同样的错误:( 2005 年不允许子查询。如果你想这样做,只需尝试声明一个变量并设置它的值,然后插入表中 :)
  • 它在我的 2005 实例上工作时有点奇怪。删除列别名并检查..我已经更新了答案。
  • @PraveenNambiar 您需要删除VALUES 关键字,然后使用SELECT 插入表格,然后它就可以正常工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多