带参数的存储过程

时间:2013-12-20 18:20:14

标签: sql stored-procedures

我必须将参数传递给SQL Server中的存储过程。参数值将在“IN”子句中用作逗号分隔列表:

这样的事情:

... ... 
@myParam as varChar(max)
.... .. 

select *
from myTable 
where someValue in (@myParam).

所以,我认为,我必须以某种方式传递sql字符串本身的参数。使用Hibernate调用从Java调用存储过程。

有任何建议表示赞赏吗?

4 个答案:

答案 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)

您应该能够从调用过程的任何地方传递字符串值。