我必须将参数传递给SQL Server中的存储过程。参数值将在“IN”子句中用作逗号分隔列表:
这样的事情:
... ...
@myParam as varChar(max)
.... ..
select *
from myTable
where someValue in (@myParam).
所以,我认为,我必须以某种方式传递sql字符串本身的参数。使用Hibernate调用从Java调用存储过程。
有任何建议表示赞赏吗?
答案 0 :(得分:2)
尝试这样的事情:
DECLARE @SQL VARCHAR(5000)
SET @SQL = 'SELECT *
FROM myTable
WHERE somevalue IN ('+ @myParam+')'
EXEC (@SQL)
希望这有帮助。
答案 1 :(得分:1)
您可以创建一个函数将逗号分隔值转换为表,然后您可以使用表在IN CLAUSE中执行SELECT,或者您也可以根据需要执行JOIN。这样您就可以将它用于任何数据类型,即逗号分隔的varchar或int值。 (你只需要使函数通用)
见以下网址:
http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx
答案 2 :(得分:1)
您可以使用递归函数或cte来提取数据,然后使用Join或where in(select ....) 请注意,当前算法最后需要一个分隔符。 如果使用UDF,则可以将@separator和@source作为参数传递
DECLARE @separator varchar(1024) = ','
DECLARE @source varchar(1024) = 'valueA,ValueB,ValueC,'
;WITH cteDelimitedExtractor (item, delimitedString) AS
(
SELECT
SUBSTRING(@source, 1, CHARINDEX(@separator, @source ) - 1) AS ititem,
SUBSTRING(@source, CHARINDEX(@separator, @source ) + 1, LEN(@source) - CHARINDEX(@separator, @source)) as delimitedString
UNION ALL
SELECT
SUBSTRING(delimitedString, 1, CHARINDEX(@separator, delimitedString ) - 1) AS item,
SUBSTRING(delimitedString, CHARINDEX(@separator, delimitedString ) + 1, LEN(delimitedString) - CHARINDEX(@separator, delimitedString )) as delimitedString
FROM cteDelimitedExtractor
WHERE delimitedString <> ''
)
SELECT item FROM cteDelimitedExtractor
答案 3 :(得分:0)
您应该能够从调用过程的任何地方传递字符串值。