ai didi

sql-server - sp_executesql 按 "must contain at least one column that is not an outer reference"分组

转载 作者:行者123 更新时间:2023-12-03 02:42:06 24 4
gpt4 key购买 nike

在简化版本中,我正在尝试做类似的事情:

Set @datepart = 'DATEPART(year, myDate)' 
Set @SQLQuery = 'SELECT @datepart AS TIME
FROM someTable
GROUP BY @datepart'
Execute sp_executesql @SQLQuery, N'@datepart nvarchar(1000)', @datepart

但我明白:

Each GROUP BY expression must contain at least one column that is not an outer reference.

如果我不参数化它,它就会工作,意味着

Set @SQLQuery = 'SELECT ' + @datepart + ' AS TIME 
FROM someTable
GROUP BY ' + @datepart
Execute sp_executesql @SQLQuery

最佳答案

通过使用参数化查询,您无法实现您想要做的事情,唯一的方法是简单的动态查询

Set @SQLQuery = 'SELECT ' + @datepart + ' AS TIME 
FROM someTable
GROUP BY ' + @datepart
Execute sp_executesql @SQLQuery

因为变量只是在动态查询中充当值。考虑以下示例。

DECLARE @datepart NVARCHAR(1000),
@SQLQuery NVARCHAR(max)

SET @datepart = 'DATEPART(year, getdate())'
SET @SQLQuery = 'SELECT @datepart AS TIME'

EXECUTE Sp_executesql
@SQLQuery,
N'@datepart nvarchar(1000)',
@datepart

根据你的说法,答案应该是2015,但结果是

DATEPART(year, getdate())

关于sql-server - sp_executesql 按 "must contain at least one column that is not an outer reference"分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31673814/

24 4 0
文章推荐: sql-server - 将服务器 SQL Server 2014 链接到 SQL Server 版本 8
文章推荐: SQL - 即使出现错误也继续运行所有 SQL 语句
文章推荐: SQL如何按日期对每个条目进行排序
文章推荐: scala - 当类型已知时,为什么对重载定义的引用不明确?
行者123
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com