『壹』 sql創建個函數,參數是一個varchar型
下面寫了一個!如果不滿足你的需求你再問!
CREATE OR REPLACE FUNCTION FUN_CT(P_TAB VARCHAR2) RETURN VARCHAR2 AS
V_CT VARCHAR2(10);
V_SQL VARCHAR2(100);
BEGIN
V_SQL := 'select count(*) from ' || P_TAB;
EXECUTE IMMEDIATE V_SQL
INTO V_CT;
RETURN V_CT;
EXCEPTION
WHEN OTHERS THEN
RETURN P_TAB || '表不存在!';
END;
『貳』 用Transact-SQL語句創建一個求階乘的函數!!!!
居然用SQL這種集合操作語言,來做類C的函數式語言的事(雖然是可以的):(
現在的老師也太無聊了,估計自己很少真正使用SQL。
/*--=============================================
--Author: Yew
--Createdate:2016-10-26
--Description: 計算階乘
--testCode-------------
SELECTdbo.uf_Factorial(-1)
SELECTdbo.uf_Factorial(0)
SELECTdbo.uf_Factorial(1)
SELECTdbo.uf_Factorial(10)
SELECTdbo.uf_Factorial(33)--會否溢出?
----History-----------------
--=============================================*/
ALTERFUNCTIONdbo.uf_Factorial(
@N INT
)RETURNSBIGINT
AS
BEGIN
IF@N<0
RETURNNULL--RAISERROR(N'參數N不能為負')
IF@N=0
RETURN1
RETURNdbo.uf_Factorial(@N-1)*@N--遞歸
END
GO
『叄』 sql 建函數
確定某年某月有多少天
實現原理:先利用DATEDIFF取得當前月的第一天,再將月份加一取得下月第一天,然後減去1分鍾,再取日期的天數部分,即為當月最大日期,也即當月天數
CREATE FUNCTION DaysInMonth ( @date datetime ) Returns int
AS
BEGIN
RETURN Day(dateadd(mi,-3,DATEADD(m, DATEDIFF(m,0,@date)+1,0)))
END
『肆』 如何在SQL語句中使用FUNCTION
1、function是SQL的函數
是由一個或多個 Transact-SQL 語句組成的子程序,可用於封裝代碼以便重新使用。Microsoft® SQL Server™ 並不將用戶限制在定義為 Transact-SQL 語言一部分的內置函數上,而是允許用戶創建自己的用戶定義函數。
可使用 CREATE FUNCTION 語句創建、使用 ALTER FUNCTION 語句修改、以及使用 DROP FUNCTION 語句除去用戶定義函數。每個完全合法的用戶定義函數名 (database_name.owner_name.function_name) 必須唯一。
必須被授予 CREATE FUNCTION 許可權才能創建、修改或除去用戶定義函數。不是所有者的用戶在 Transact-SQL 語句中使用某個函數之前,必須先給此用戶授予該函數的適當許可權。若要創建或更改在 CHECK 約束、DEFAULT 子句或計算列定義中引用用戶定義函數的表,還必須具有函數的 REFERENCES 許可權。
在函數中,區別處理導致刪除語句並且繼續在諸如觸發器或存儲過程等模式中的下一語句的 Transact-SQL 錯誤。在函數中,上述錯誤會導致停止執行函數。接下來該操作導致停止喚醒調用該函數的語句。
用戶定義函數的類型
2、Procere是SQL的存儲過程
存儲過程是由流控制和SQL語句書寫的過程,這個過程經編譯和優化後存儲在資料庫伺服器中,應用程序使用時只要調用即可。在ORACLE中,若干個有聯系的過程可以組合在一起構成程序包。
存儲過程是利用SQL Server所提供的Transact-SQL語言所編寫的程序。Transact-SQL語言是SQL Server提供專為設計資料庫應用程序的語言,它是應用程序和SQL Server資料庫間的主要程序式設計界面。它好比Oracle資料庫系統中的PL-SQL和 Informix的資料庫系統結構中的Informix- 4GL語言。這類語言主要提供以下功能,讓用戶可以設計出符合引用需求的程序:
1)、變數說明
2)、ANSI兼容的SQL命令(如Select,Update….)
3)、一般流程式控制制命令(if…else…、while….)
4)、內部函數
『伍』 sql中什麼情況下需要創建函數
一般情況都不用自己創建函數,在實際應用中創建存儲過程的情況比較多,比較銀行項目這些,對資料庫要求比較高的
『陸』 sql 創建函數
--測試環境mssql2008
--思路,按逗號拆分字元串再行列轉換
--用CLR效果更好
--1.建表
CreatetableT
(
pkqvarchar(200)
)
--2.插入數據
insertintoTvalues('4井,0井,0井,0井,0井,0井,,,,,,,,,,')
insertintoTvalues('曠,0井,休,,,0井,0井,,,0井,,,,,,,,,,8井,4井,0井,0井,0井,0井,0井,8井,4井')
insertintoTvalues('曠,0井,休,0井,0井,0井,休,休,休,休,0井,0井,休,8井,4井')
--3.創建字元串拆分函數(用C#創建CLR函數效果會更好)
CreateFunctionf_split1(@SourceSqlVarchar(8000),@StrSeprateVarchar(2))
Returns@tempTable(idIntIdentity(1,1),colVarchar(100))
As
begin
Declare@chasVarchar(100)
Set@SourceSql=@SourceSql+@StrSeprate
While(@SourceSql<>'')
Begin
Set@ch=left(@SourceSql,Charindex(@StrSeprate,@SourceSql,1)-1)
Insert@temp(col)Values(@ch)
Set@SourceSql=Stuff(@SourceSql,1,Charindex(@StrSeprate,@SourceSql,1),'')
End
Return
End
--3.查詢
select
[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],
[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],
[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31]
from
(
SelectROW_NUMBER()over(orderbygetdate())ASRn,*
fromT
)Souterapplydbo.f_split1(pkq,',')
pivot
(
max(col)
foridin
(
[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],
[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],
[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31]
)
)P
--4.效果
『柒』 SQL中如何調用一個函數啊
1、首先是找到標量函數,右鍵單擊選擇新建。
『捌』 SQL中創建一個用戶自定義函數
CREATE FUNCTION DBO.tFProctsHS ( @name VARCHAR(10))
RETURNS INT --這個根據價格的類型自己修改
AS
begin
DECLARE @jiage INT;
select @jiage= jiage from 商品表 where name= @name
RETURN (@jiage)
end
--ceshi
select DBO.tFProctsHS ('記事本')
『玖』 SQL語句定義一個函數
--a為學生表,b為成績表,c為課程表
create function test(@id varchar(10))
returns table
return
select a.id,a.name,c.kcname,c.kcnumber,b.scores from a
left join b on b.id=a.id
left join c on c.id=a.id
where a.id=@id
這樣應該對的,希望可以幫到你。
『拾』 SQL創建用戶自定義函數
樓主我只寫了其中一個..基本方法都如此,希望對您有幫助,代碼如下
ALTER FUNCTION [dbo].[sum]
(
@class varchar(100), --所選課程
@username varchar(20) --學生姓名
)
RETURNS int
AS
BEGIN
DECLARE @reun int
SELECT SUN(@class) FROM YOURTABLE WHERE USERNAME=@username
RETURN @reun
END