我需要调用这样的存储过程:
exec myProcedure '(5, 15, 45)'
在这个过程中,我需要在冲突中使用像这样:
SELECT ... FROM table WHERE (days in @intSet)
这总是在WHERE子句中带来语法错误。(SqlServer显然不允许简单地用字符串替换语句的一部分)
我计划这样一个解决方案:
我可以使用CHARDINDEX、SUBSTRING、RTRIM、LTRIM、CONVERT—这不是问题—工作正常。
但我仍然不知道我可以把这些整数放入什么样的变量中,以便以后在in子句中使用它
非常感谢任何想法
Gerald
您需要在数据库中创建一个拆分函数
分割函数的定义
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