‘壹’ sql ${}可以接受数组类型的数据吗
SQL Server并没有数组类型,ANSI SQL-92标准中并没有任何有关数组方面的定义。要实现其他高级语言中的数组功能,我们必须使用一些特殊的处理方法,其中包括特殊设计的字符参数、临时表、XML等。
‘贰’ 在SQL中如何从数组中获取值再进行查询
----首先定义一个split函数,其作用是将字符串拆分成表
CREATEFUNCTION[fn_split]
(@SourceSqlvarchar(8000),@StrSepratevarchar(10))
RETURNS@temptable
(
[n]intNULL,
[a]varchar(100)NULL
)
AS
BEGIN
declare@iint,@nint;
set@n=0;
set@SourceSql=rtrim(ltrim(@SourceSql));
set@i=charindex(@StrSeprate,@SourceSql);
while(@i>=1)
begin
set@n=@n+1;
insert@temp([n],[a])values(@n,left(@SourceSql,@i-1));
set@SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i);
set@i=charindex(@StrSeprate,@SourceSql);
end
if(@SourceSql<>'')
begin
set@n=@n+1;
insert@temp([n],[a])values(@n,@SourceSql);
end
return
END
GO
--接下来利用这个函数将数组转化成表,查出A的对应值
declare@Cvarchar(100),@Dvarchar(100);
set@C='a1,a2,a3,a4,a5,a6';
set@D='b1,b2,b3,b4,b5,b6';
declare@Avarchar(10),@Bvarchar(10);
set@A='a4';
select@B=t2.afromfn_split(@C,',')t1,fn_split(@D,',')t2wheret1.n=t2.nandt1.a=@A;
select@B;
--这里将得到@B=b4
--接下来就可以使用@B了
select TOP 7 * from Data_Content where title = @B order BY ID DESC
‘叁’ 如何用sql语句取出二维数组
只要两个表有关联的字段,肯定就可以
类似语句
select * from A left join B using(id) where ....
如果有不明白的可以M我
‘肆’ PLSQL:如何读取参数数组
DECLARE @Test VARCHAR(50)
DECLARE @ArgsTable TABLE
(
Arg VARCHAR(50)
)
SET @Test = 'ASD,FGH,JKL,YUI'
DECLARE @TempIndex INT
WHILE @Test LIKE '%,%'
BEGIN
SET @TempIndex = CHARINDEX(',',@Test) --取出,位置
INSERT INTO @ArgsTable(Arg)
SELECT SUBSTRING(@Test,0,@TempIndex) --截取第一个参数
SET @Test = RIGHT(@Test,LEN(@Test) - @TempIndex) --使 @Test 取截后的字符串
IF @Test NOT LIKE '%,%' --如果是最后一个,加入列表并退出
BEGIN
INSERT INTO @ArgsTable(Arg)
SELECT @Test
BREAK;
END
END
SELECT * FROM @ArgsTable
‘伍’ SQL语句可以声明使用数组么
SQL语句可以声明使用数组,声明方法为:
1、先定义一个数组,数组内容是一些数字,可以对应为数据表里的id列。
‘陆’ 请问数组可以作为sql的查询源吗
SQL语句并不属于VB本身的命令,当VB遇到程序中的SQL语句时,就会自动提交给操作系统中相关的数据库查询引擎进行处理,因此VB本身的变量是无法直接传递到SQL语句中的,必须转化为实际数值。也就是说,当数据库查询引擎得到这条SQL语句时,就会把a(1000)这几个字符直接作为表名称来看待了,而这显然是错误的。这也就意味着,数组是不可能作为SQL的查询源的。别把SQL语句看成是万能的,它不过就是系统内置的数据库搜索引擎与其他高级程序设计语言的连接纽带,也就是说,同一条SQL语句,在VB、VC、C++等等中的用法是完全一样的。
‘柒’ sql 读取数组问题
我以前也用这种方式,如果在数据库里查询,就要用到游标,如果在程序里就要用到循环.
我现在遇到这种情况,就把它改成三张表,一张商品表,一张分类表,一张是商品与分类对应表,这样处理起来更方便
‘捌’ asp里sql怎样读出数组的值
T-SQL对字符串的处理能力比较弱,比如要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组,所以处理下来比较麻烦。下边的函数,实现了象数组一样去处理字符串。 一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。 Create function Get_StrArrayLength ( @str varchar(1024), --要分割的字符串 @split varchar(10) --分隔符号 ) returns int as begin declare @location int declare @start int declare @length int set @str=ltrim(rtrim(@str)) set @location=charindex(@split,@str) set @length=1 while @location<>0 begin set @start=@location+1 set @location=charindex(@split,@str,@start) set @length=@length+1 end return @length end 调用示例:select dbo.Get_StrArrayLength('78,1,2,3',',') 返回值:4二、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便 Create function Get_StrArrayStrOfIndex ( @str varchar(1024), --要分割的字符串 @split varchar(10), --分隔符号 @index int --取第几个元素 ) returns varchar(1024) as begin declare @location int declare @start int declare @next int declare @seed int set @str=ltrim(rtrim(@str)) set @start=1 set @next=1 set @seed=len(@split) set @location=charindex(@split,@str) while @location<>0 and @index>@next begin set @start=@location+@seed set @location=charindex(@split,@str,@start) set @next=@next+1 end if @location =0 select @location =len(@str)+1 --这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号. return substring(@str,@start,@location-@start) end 调用示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2) 返回值:9三、结合上边两个函数,象数组一样遍历字符串中的元素 declare @str varchar(50) set @str='1,2,3,4,5' declare @next int set @next=1 while @next<=dbo.Get_StrArrayLength(@str,',') begin print dbo.Get_StrArrayStrOfIndex(@str,',',@next) set @next=@next+1 end
‘玖’ 在sql语言中,如何提取出数组中的一段数据。
SQL基于集合的,没有数组
数组可用集合代替,比如一个表
‘拾’ SQL语句里能用数组类型吗
在SQL Server 2005、2008版中
数组是没有,如果要一次插入多条数据是可以的
语法如下:
insert into 表名(字段1,字段,……,字段n)
select 数值1,数值2,……,数值n union
select 数值1,数值2,……,数值n union
select 数值1,数值2,……,数值n union
select 数值1,数值2,……,数值n union
select 数值1,数值2,……,数值n