在我的存储过程中,我需要根据用户输入进行选择
查询将是这样的
SELECT A,B FROM MYTABLE WHERE B=array[0] OR B=array[1] OR B=array[2]
我不知道数组中的项目数。用户选择将决定数组中元素的数量。
我怎样才能做到这一点?如果我能做到这一点,我可以避免对数组中的每个元素使用相同的过程。
在我的存储过程中,我需要根据用户输入进行选择
查询将是这样的
SELECT A,B FROM MYTABLE WHERE B=array[0] OR B=array[1] OR B=array[2]
我不知道数组中的项目数。用户选择将决定数组中元素的数量。
我怎样才能做到这一点?如果我能做到这一点,我可以避免对数组中的每个元素使用相同的过程。
您可以创建用户定义表类型,而不是数组
CREATE TYPE dbo.type_name AS TABLE
(
column1 INT NOT NULL
)
将页面中的单个列DataTable
作为参数传递(值与该数组中的值相同)。
在程序中,您可以按如下方式使用它
CREATE PROCEDURE proc_name
@array dbo.type_name READONLY
AS
SELECT A,B FROM MYTABLE WHERE B IN (select column1 from @array)
你可以看看使用表值参数(数据库引擎)
表值参数是使用用户定义的表类型声明的。您可以使用表值参数将多行数据发送到 Transact-SQL 语句或例程(例如存储过程或函数),而无需创建临时表或许多参数。
除此之外,您可能希望将其作为 XML 参数传递,然后将其转换为 SP 中的表。在 SQL Server 中使用 XML
您甚至可以传入一个分隔字符串,并将其拆分为表格以正确的方式拆分字符串 - 或次佳方式
尝试这个
发送逗号分隔的字符串而不是数组
DECLARE @array0 VARCHAR(MAX)
--Commaseprated string array0
DECLARE @tmpArray0 TABLE ( value1 VARCHAR(500) )
--table for Commaseprated string array0
WHILE CHARINDEX(',', @tmpArray0) > 0
BEGIN
INSERT INTO @tmpArray1
SELECT SUBSTRING(@array0, 1, ( CHARINDEX(',', @array0) - 1 ))
SET @array0 = SUBSTRING(@array0, CHARINDEX(',', @array0) + 1,
LEN(@array0))
END
DECLARE @array1 VARCHAR(MAX)
--Commaseprated string array1
DECLARE @tmpArray1 TABLE ( value1 VARCHAR(500) )
--table for Commaseprated string array1
WHILE CHARINDEX(',', @array1) > 0
BEGIN
INSERT INTO @tmpArray1
SELECT SUBSTRING(@array1, 1, ( CHARINDEX(',', @array1) - 1 ))
SET @array1 = SUBSTRING(@array1, CHARINDEX(',', @array1) + 1,
LEN(@array1))
END
DECLARE @array2 VARCHAR(MAX)
--Commaseprated string array2
DECLARE @tmpArray2 TABLE ( value1 VARCHAR(500) )
--table for Commaseprated string array2
WHILE CHARINDEX(',', @array2) > 0
BEGIN
INSERT INTO @tmpArray2
SELECT SUBSTRING(@array2, 1, ( CHARINDEX(',', @array2) - 1 ))
SET @array2 = SUBSTRING(@array2, CHARINDEX(',', @array2) + 1,
LEN(@array2))
END
SELECT A ,
B
FROM MYTABLE
WHERE B IN ( SELECT value1
FROM @tmpArray0 AS ta )
OR B IN ( SELECT value1
FROM @tmpArray1 AS ta )
OR B IN ( SELECT value1
FROM @tmpArray2 AS ta )
Please, get comma seprated string from array, is like that "12,23,25,256". Finally execute
as per below :
where @array_string is parameter of string of array:
SELECT A,B FROM MYTABLE WHERE B in(@array_string);