【发布时间】:2015-10-02 14:53:56
【问题描述】:
如何使用在代码中为粗体的 with 子句中的 where 语句中包含字符串的参数。我尝试使用该方法,但它不起作用。
我已经添加了一个名为 @param nvarchar(max) 的参数。
WITH Sales_CTE (SalesPersonID, SalesOrderID, SalesYear)
AS
(
SELECT SalesPersonID, SalesOrderID, YEAR(OrderDate) AS SalesYear
FROM Sales.SalesOrderHeader
**WHERE SalesPersonID IN ('+ @param +')**
)
SELECT SalesPersonID, COUNT(SalesOrderID) AS TotalSales, SalesYear
FROM Sales_CTE
GROUP BY SalesYear, SalesPersonID
【问题讨论】:
-
您有 2 个选择,1. 使用动态 SQL,2,将 LIKE 与 @param 的已知模式一起使用
-
动态sql怎么做?我尝试在 with 子句中使用 SET @sql = 'Select.......' 但我不认为它真的有效。你能告诉我如何用你的方式使用动态 sql 吗?
-
理想情况下,更改您的调用约定。使用 xml,或者,理想情况下,使用表值参数,而不是 字符串。前两种类型都设计用于保存多个值,并且可以(相对)自然地在查询中使用。一个字符串(我猜这将是一个包含逗号和可能的引号的字符串)将被视为单个字符串,就像在大多数其他语言中一样。
-
如果@param 像'1,2,3'或'1',你可以轻松创建where条件,无需动态SQL
WHERE ',' + @param + ',' LIKE '%,' + CAST(SalesPersonID as varchar(10)) + ',%' -
@param 将类似于“'ID 21312','ID 1243213','ID 342342'.......”类似的东西
标签: sql sql-server-2008