sql存儲過程聲明
sql的存儲過程有點類似函數,c#里就像執行sql語句一樣 執行存儲過程就行,
(1)執行一個沒有參數的存儲過程的代碼如下:
SqlConnection conn=new SqlConnection(「connectionString」);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcere";
da.SelectCommand.CommandType = CommandType.StoredProcere;
然後只要選擇適當的方式執行此處過程,用於不同的目的即可。
(2)執行一個有參數的存儲過程的代碼如下(我們可以將調用存儲過程的函數聲明為ExeProcere(string inputdate)):
SqlConnection conn=new SqlConnection(「connectionString」);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcere";
da.SelectCommand.CommandType = CommandType.StoredProcere;
(以上代碼相同,以下為要添加的代碼)
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
這樣就添加了一個輸入參數。若需要添加輸出參數:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Output;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
若要獲得參儲過程的返回值:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.ReturnValue;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
㈡ SQL存儲過程提示必須聲明變數@ID(在線等)
CREATE procere getList
@ID int,
as
修改:
CREATE procere getList
@ID int
as
除掉 ,
2005創建成功
㈢ sql 執行存儲過程的參數怎麼聲明
create procere MonthReport
@reportStartDate datetime,@reportEndDate datetime --參數
as
begin transaction
.......
commit transaction
go
------------------------
execute MonthReport '2011-07-01','2011-07-31' --調用存儲過程
go
㈣ sql 存儲過程中 如何使用declare 有的存儲過程聲明了,有的沒有聲明。請回答的詳細點。。謝謝
存儲過程既可以有declare語句,也可以沒有,declare聲明的是一個語句塊,是pl/sql執行的基本單位,
案例:一個基本的declare語句塊
DECLARE
e_invalid_departmentEXCEPTION;--聲明部分,給例外命名
BEGIN
UPDATEdepartments
SETdepartment_name='OracleTechnologyCenter'
WHEREdepartment_id=60;
IFSQL%NOTFOUNDTHEN
RAISEe_invalid_department;--程序執行部分,使用raise語句顯示拋出例外
ENDIF;
COMMIT;
EXCEPTION
WHENe_invalid_departmentTHEN--例外處理部分,處理拋出的例外
DBMS_OUTPUT.PUT_LINE('Nosuchdepartmentid.');
END;
一個簡單的存儲過程案例:
CREATEPROCEDUREquery_emp(p_idINemployees.employee_id%TYPE,
p_nameOUTemployees.last_name%TYPE,
p_salaryOUTemployees.salary%TYPE,
p_commOUTemployees.commission_pct%TYPE)
AUTHIDCURRENT_USERIS
BEGIN
SELECTlast_name,salary,commission_pct
INTOp_name,p_salary,p_comm
FROMemployees
WHEREemployee_id=p_id;
ENDquery_emp;
㈤ SQL存儲過程 必須聲明標量變數問題 資料庫中執行成功,但是當我用程序調用存儲過程時提示「必須聲明標量」
exec('insert into ' +@tablename+ ' values(@caname,@firsturl,@num,@seconrl,@fromurl,@flg)')
修改一下:
exec('insert into ' +@tablename+ ' values('+@caname+ ','+@firsturl+ ','+@num+ ','+@seconrl+ ','+@fromurl+ ','+@flg+ ')')
㈥ 在SQL存儲過程中,如何聲明變數,賦值變數。最好有具體語句配上實例。3Q啦。謝謝各位大俠的幫忙
/*
Sql server 存儲過程中怎麼將變數賦值
*/
--SQL賦值語句
DECLARE @test1 INT
SELECT @test1 = 111
SET @test1 = 222
--SQL函數賦值,假定count()是自定義函數
DECLARE @test2 INT
SELECT @test2 = COUNT(*) FROM sys.sysobjects
--SQL存儲過程賦值,直接傳參處理(類似C語言中的指針嗎)
IF OBJECT_ID('sp_test') IS NOT NULL DROP PROCEDURE sp_test
GO
CREATE PROCEDURE sp_test(@test INT OUTPUT)
AS
BEGIN
SELECT @test = 999
END
GO
DECLARE @test3 INT
EXEC sp_test @test3 OUTPUT
SELECT @test3
DROP PROCEDURE sp_test
GO
㈦ SQL 中存儲過程怎麼使用
一、簡單的儲存過程:
1、創建一個存儲過程
create procere GetUsers()
begin
select * from user;
end;12345
2、調用存儲過程
call GetUsers();12
3、刪除存儲過程
drop procere if exists GetUsers;
二、帶參數的存儲過程
1、MySql 支持 IN (傳遞給存儲過程) , OUT (從存儲過程傳出) 和 INOUT (對存儲過程傳入和傳出) 類型的參數 , 存儲過程的代碼位於 BEGIN 和 END 語句內 , 它們是一系列 SQL 語句 , 用來檢索值 , 然後保存到相應的變數 (通過指定INTO關鍵字) ;
2、下面的存儲過程接受三個參數 , 分別用於獲取用戶表的最小 , 平均 , 最大分數 , 每個參數必須具有指定的類型 , 這里使用十進制值(decimal(8,2)) , 關鍵字 OUT 指出相應的參數用來從存儲過程傳出
create procere GetScores(
out minScore decimal(8,2),
out avgScore decimal(8,2),
out maxScore decimal(8,2)
)
begin
select min(score) into minScore from user;
select avg(score) into avgScore from user;
select max(score) into maxScore from user;
end;1234567891011
3、調用此存儲過程 , 必須指定3個變數名(所有 MySql 變數都必須以@開始) , 如下所示 :
call GetScores(@minScore, @avgScore, @maxScore);12
4、該調用並沒有任何輸出 , 只是把調用的結果賦給了調用時傳入的變數@minScore, @avgScore, @maxScore, 然後即可調用顯示該變數的值 :
select @minScore, @avgScore, @maxScore;
5、使用 IN 參數 , 輸入一個用戶 id , 返回該用戶的名字 :
create procere GetNameByID(
in userID int,
out userName varchar(200)
)
begin
select name from user
where id = userID
into userName;
end;12345678910
6、調用存儲過程 :
call GetNameByID(1, @userName);
select @userName;123
㈧ SQL server2000存儲過程,提示「必須聲明變數@FYear」
存儲過程中肯定使用到了@FYear,而你沒有聲明這個變數。
decalre @FYear 類型
如果你聲明了,那你把語法寫出來吧,肯定是哪個地方不小心寫錯了。
看您貼出的代碼,可不只是這個提示這個錯誤了。
首先你的@sqlstr沒聲明
後邊的set @sqlstr = @sqlstr + 加號的後邊都是字元串的部分,也就是說,存儲過程的兩個參數,都被你引到了單引號當中,那麼就失去了傳值的作用了,成了字元串的一部分了。
還有select @sqlstr=@sqlstr+',coalesce(p.'+FEmpField+',0)' from cz_t_gzfl order by fid,這個返回行數是一行吧?如果是多行,這個沒辦法賦值的。
㈨ 高分求解:SQL存儲過程輸出參數必須聲明標量變數問題
exec('select @totalCount = count(['+ @orderByWhere +']) from '+ @pageTable +' where '+ @pageWhere)
你count 直接count(*) 就可以了...
網上Demo很多你找一個直接用多好
