在一個簡化版本,我試圖做這樣的事情: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