我需要像这样调用一个存储过程:
exec myProcedure '(5, 15, 45)'在这个过程中,我需要在in-Clasue中使用int-set,如下所示:
SELECT ... FROM table WHERE (days in @intSet)这总是会在WHERE子句中带来语法错误。(SqlServer显然不允许简单地将语句的一部分替换为字符串)
我计划了一个这样的解决方案:
我可以很容易地使用CHARINDEX,SUBSTRING,RTRIM,LTRIM,CONVERT将字符串的整数值分成几个整数-这不是问题-它工作得很好。
但是我仍然不能弄清楚我可以把这些整数放入哪种类型的变量中,以便稍后将其与IN-Clause一起使用?
我们非常感谢您的任何想法
杰拉尔德
发布于 2014-09-27 18:30:10
您将需要在数据库中创建一个拆分函数,
拆分函数的定义
CREATE FUNCTION [dbo].[split]
(
@delimited NVARCHAR(MAX),
@delimiter NVARCHAR(100)
)
RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
AS
BEGIN
DECLARE @xml XML
SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'
INSERT INTO @t(val)
SELECT r.value('.','varchar(MAX)') as item
FROM @xml.nodes('/t') as records(r)
RETURN
END存储过程
然后,您可以在过程中使用此拆分函数来拆分要与In运算符一起使用的值。
CREATE PROCEDURE GetData
@intSet VARCHAR(1000) = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT * FROM TableName
WHERE days IN (SELECT Val FROM dbo.split(@intSet ))
END https://stackoverflow.com/questions/26073243
复制相似问题