存储过程selectas
⑴ 如何在SELECT语句中调用存储过程的结果
在SELECT语句中调用存储过程的结果:
直接调用好像不可以!不过猜冲你可以把存储过程中的内容插入一张临时表,然后再从临时表中调用!
sql">createtabletable1(a1int,a2int,a3int)
inserttable1
select1,3,4unionall
select2,3,4unionall
select6,7,8unionall
select9,1,6unionall
select12,13,16
select*fromtable1
/*
a1a2a3
---------------------------------
134
234
678
916
1213雹做16
*/
go
--随便写个存储过程穗肆歼
createprocProc_table1
(@a1int,@a2int,@a3int)
as
begin
select2*@a1+3*@a2+@a3
end
go
createtable#t(asumint)
declaremy_cursorcursorfor
selecta1,a2,a3fromtable1
openmy_cursor
declare@a1int,@a2int,@a3int
fetchnextfrommy_cursorinto@a1,@a2,@a3
while(@@fetch_status=0)
begin
insertinto#texecProc_table1@a1,@a2,@a3--执行存储过程
fetchnextfrommy_cursorinto@a1,@a2,@a3
end
closemy_cursor
deallocatemy_cursor
selectsum(asum)from#t
/*
179
*/
droptable#t
⑵ 存储过程select语句返回的结果如何接收
SET @length=SELECT count(id) FROM Split(@subjectid,',')
改为漏猛乎SELECT @length=count(id) FROM Split(@subjectid,',')
SELECT @article=SELECT a FROM Split(@subjectid,',') WHERE id=@id
改为SELECT @article=a FROM Split(@subjectid,',') WHERE id=@id
SELECT @articlensid=INSERT INTO sourcelib SELECT TITLE FROM sourcelib WHERE NSID =@NSID SELECT @@IDENTITY
改为
INSERT INTO sourcelib SELECT TITLE FROM sourcelib WHERE NSID =@NSID
SELECT @articlensid=@@IDENTITY
你这个基本上都是赋值的错误,请知隐参照返悉上面给的修改方法把其他的都修改好后再调试。
⑶ select查询sql存储过程的结果
把大的结果当成一个表来用,桥祥有这样敏谈搏的sql语句
比如a表和b表。里边分别存放1月和2月的数据,侍卖现在要从两个表里取id=1的所有数据
select a.* from (select * from a union all select * from b ) as a where id=1
⑷ mysql 创建存储过程中用到循环,怎么通过select返回结果集
测试表与测试数据
CREATETABLETestMulToOne(
nameVARCHAR(10),
allTitlesVARCHAR(200)
);
INSERTINTOTestMulToOneVALUES('张三','程序员,系统管理员,网络管理员');
INSERTINTOTestMulToOneVALUES('李四','项目经理,系统分析员');
DELIMITER//
DROPFUNCTIONGetTextCount//
/**********
--获取字符串中有几个部分.
**********/
CREATEFUNCTIONGetTextCount(pSourceTextVARCHAR(255),pDivCharCHAR(1))
RETURNSTINYINT
BEGIN
--预期结果.
DECLAREvResultTINYINT;
--当前逗号的位置.
DECLAREvIndexINT;
--前一个逗号的位置.
DECLAREvPrevIndexINT;
--结果的初始值.
SETvResult=1;
--查询第一个逗号的位置.
SETvIndex=INSTR(pSourceText,pDivChar);
IFvIndex=0THEN
--参数中没有逗号,直接返回.
RETURNvResult;
ENDIF;
--初始化情况,前一个逗号不存在.
SETvPrevIndex=0;
--循环处理。
WHILEvIndex>0DO
--结果递增.
SETvResult=vResult+1;
--前一个逗号的位置=当前逗号的位置
SETvPrevIndex=vIndex;
--查询下一个逗号的位置.
SETvIndex=LOCATE(pDivChar,pSourceText,vPrevIndex+1);
ENDWHILE;
--返回结果.
RETURNvResult;
END;
//
DROPFUNCTIONGetTextValue//
/**********
--获取字符串中具体某一个部分的数据.
**********/
CREATEFUNCTIONGetTextValue(pSourceTextVARCHAR(255),pDivCharCHAR(1),pIndexTINYINT)
RETURNSVARCHAR(255)
BEGIN
--预期结果.
DECLAREvResultVARCHAR(255);
IFpIndex=1THEN
SELECTSUBSTRING_INDEX(pSourceText,pDivChar,1)INTOvResult;
ELSE
SELECT
REPLACE(
SUBSTRING_INDEX(pSourceText,pDivChar,pIndex),
CONCAT(SUBSTRING_INDEX(pSourceText,pDivChar,pIndex-1),pDivChar),
'')INTOvResult;
ENDIF;
--返回.
RETURNvResult;
END;
//
DELIMITER;
/*
SELECTGetTextCount('程序员,系统管理员,网络管理员',',')ASCo;
SELECT
GetTextValue('程序员,系统管理员,网络管理员',',',1)ASA,
GetTextValue('程序员,系统管理员,网络管理员',',',2)ASB,
GetTextValue('程序员,系统管理员,网络管理员',',',3)ASC;
*/SELECT
t.name,
GetTextValue(t.allTitles,',',MaxNum.No)ASOneTitle
FROM
TestMulToOnet,
(SELECT1NoUNIONALL
SELECT2NoUNIONALL
SELECT3NoUNIONALL
SELECT4NoUNIONALL
SELECT5No)MaxNum
WHERE
GetTextCount(t.allTitles,',')>=MaxNum.No
ORDERBY
t.name;
+------+------------+
|name|OneTitle|
+------+------------+
|张三|系统管理员|
|张三|网络管理员|
|张三|程序员|
|李四|系统分析员|
|李四|项目经理|
+------+------------+
5rowsinset(0.00sec)
⑸ SQLSERVER 存储过程 查询语句里有字符串怎么写 Set @S='Select '测试SQL' as 测试,a from TBtest';
这样改即可:
Declare @s nVarchar(max);
--需要执和桐高行的SQL:Select '测试唤尺SQL' as 测试,a from TBtest;
Set @S='Select ''测试轮山SQL'' as 测试,a from TBtest';
exec (@s);
⑹ 怎么样写个select通用的存储过程
CREATE PROCEDURE [dbo].[--存储过程名--]
( @PageSize AS integer,--分页,每页显示几条记录
@PageNum AS integer,--分页,显示第几页信息纳毁
@Keyword AS varchar(100),--搜索,关键字
@Type AS integer--类李茄伏型)
AS
BEGIN
BEGIN TRAN
DECLARE @SQLStr AS varchar(4000)
DECLARE @strTemp AS varchar(300)
SET @strTemp=''
IF (@Keyword !='' )
BEGIN
SET @strTemp = @strTemp + ' AND (字段1 LIKE ''%' + @KeyWord + '%'' )'
END
IF(@Type!=99)
BEGIN
SET @strTemp = @strTemp + ' AND (Type = '+ cast(@Type AS varchar) +')'
END
SET @SQLStr='SELECT TOP '+cast(@PageSize AS varchar)+'
字段1,
字段2,
字段3,
...,
RecTotal=(SELECT count(Adminid) FROM Admin WHERE (Status>0)'+@strTemp +')--一共有多少条记录哪携
FROM Admin WITH (NOLOCK)
WHERE '+@strTemp +' AND id NOT IN (SELECT TOP '+cast(@PageSize*(@PageNum) AS varchar)+' id FROM 表 WHERE (Status>0) '+@strTemp +' ORDER BY id)
ORDER BY id'
EXEC(@SQLStr)
IF (@@error!=0)
BEGIN
RAISERROR 20000 ' '
ROLLBACK TRAN
RETURN (1)
END
COMMIT TRAN
END
⑺ 求解分析下面的存储过程!as 后面一般是select 语句,他写的是create语句。这符合规定吗
从目前来看,
猜测是定义了一盯如个临时表凯大启,
用完就删除,这是被允许的,
虽然你这写的看起来效率不高...
就是说先定义一个临时的表,然后把查仿携询到的值先插入到表中,这样做的好处是把原本复杂的语句分解到相对简单的程度.
缺点就是多了一个建表,插入,查询,删除的步骤,费时费力
⑻ sql存储过程中select语句被截断
可能是超出其长度了,将declare@GB_jinFiv2varchar(8000)启基改为纳旁粗declare@GB_jinFiv2varchar(max)试洞镇试看
⑼ 存储过程中执行create table as select from提示表或视图不存在
你是意思是UP_DXPT_BB_ZWSR 执行报表则和或者视图不存在 ?
那你先败旁确认下
select
t.sort_line as VCHID,
t.sort_line as BILLIDS,
t.set_year as set_year,
t.cre_money as CRE_MONEY
from syzw.voucher_detail_budget t where t.as_code like "4%"
and t.set_year=2014
and substr(latest_op_date,1,10) >=to_char((sysdate -interval ''7'' day),''yyyy-mm-dd''察盯橡)
执行有没有问题