在一个简化版本,我试图做这样的事情:sp_executesql的集团通过“必须包含至少一列不是外部引用”
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
,但我得到:
每个GROUP BY表达式都必须包含至少一个不是外部引用的列 。
它工作,如果我不将其参数化,意味着
Set @SQLQuery = 'SELECT ' + @datepart + ' AS TIME
FROM someTable
GROUP BY ' + @datepart
Execute sp_executesql @SQLQuery
这是不可能的参数?我不能在我的用例中使用一个简单的查询,而第二个解决方案 - 就像我刚刚学到的 - 易于使用SQL注入和不良表现一样。 http://stackoverflow.com/questions/31670688/what-is-the-advantage-of-using-parmdefinition-in-sp-executesql – Kiechlus