存儲過程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''察盯橡)
執行有沒有問題