預存程序和函數的不同

預存程序和函數的不同

轉貼於https://dotblogs.com.tw/shadow/archive/2011/05/14/25064.aspx

 

[MSSQL] SQL Server 線上筆記

預存程序和函數的不同
  輸入參數 輸出參數(out) 回傳值 T-SQL陳述式限制 呼叫方法
Stored Procedure 可有可無 可有可無 數字、資料集或可以不回傳
不可回傳字串
可以新刪修實體物件 [Declare @return_value int]
Exec [@return_value=]預存程序名稱 [參數1][,參數2 | ,參數3 out]
Function

沒有時,仍要有()
例:myFun()

沒有out 一定要宣告Returns 回傳型別
一定要回傳數字or字串or資料集
只能對變數物件做新刪修 通常使用在Select陳述式
回傳數字or字串的純量值函數:
Select dbo.函數名稱(參數)
From UserTable
Where 欄位=dbo.函數名稱(參數)
回傳資料集的資料表值函數:
Select *
From dbo.函數名稱(參數)
@@ROWCOUNT和ADO.net ExecuteNonQuery()比較
  預設值 新刪修 Select陳述式
MSSQL的@@ROWCOUNT 1 回傳異動筆數 回傳查詢筆數
ADO.net SqlCommand的ExecuteNonQuery() X 回傳異動筆數 回傳-1


 

 

View可以回傳資料集,無輸入參數

呼叫方式類似Function的資料表值函數

 

 

從活動監視器(Activity Monitor)中找出Lock

 

SQL Server 技術公告-如何解決死結

SQL2008R2的XACT_ABORT(XACT中止)預設OFF

但我是那種「一個Transaction中一道異動指令失敗,整個Transaction就要Rollback」那一派,所以XACT_ABORT還是設為ON吧

 

Table Join圖解

Coding Horror A Visual Explanation of SQL Joins

 

動態執行SQL字串好文

動態 SQL 威力展示 (1) - 基本概念
動態 SQL 威力展示 (2) - “類 ‧ 多維度分析”開發實例

 

 

SQL SERVER 20008 主键使用 uniqueidentifier 索引

關於SQL SERVER 升級或移轉問題

使用 PIVOT 和 UNPIVOT

根据列值统计结果的查询语句
sql 列转行(UNPIVOT)

 

如何把 SQL Server 標準版當成 SQL Server Express 來用(別名使用時機)

 

使用SQL Linked Server 簡化跨資料庫查詢
如何在 SQL 2005 中設定連結的伺服器(Linked Server)
多数据库查询即数据筛选问题!

 

Select * from TableName Where ColumnName in (@c) 變數@c的技巧&問題

T-SQL 預存程序 not in ( 如何傳入變數 )

 

 

MS SQL日期處理方法 @ 每日的點點滴滴 隨意窩 Xuite日誌
--取得本週的星期日(假設本週開始日為星期日)
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),-1)
--星期一
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
--星期二
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),1)
做週曆參考用

[SQL] Sql Server 中一個非常強大的日期格式化函數 Convert

 

SQL 2008 系統安裝錯誤,安裝失敗大集合。 - 混亂,逐漸擴散~- 點部落

MSSQL分頁幾種寫法討論

SQL 分頁 by mis2000Lab 整理

 

動態將多筆資料的特定欄位依分隔符號組成字串 by TerryChuang

使用遞迴CTE拆解用特定間隔符號所組成的字串 by TerryChuang

[SQL]將多筆資料中某一列的資料作為一列顯示 by亂馬客

MSDN討論:抓取後面幾筆

[SQL Denali] T-SQL 增強介紹

SQL Server 的最大容量規格

[SQL] 於多筆重複資料中取得該重複群組中最新一筆資料、論壇上的應用:查第一筆資料

如何刪除重複資料<快速刪除資料>

SQL-CLR 型別對應 (LINQ to SQL)對應 CLR 參數資料

使用C#連結MS SQL 的程式,本機是否也要安裝SQL SERVER才行?

Ado.net 联接数据库的问题

如何找到自增字段identity列的空缺/间隔记录

請問查出每週星期天日期的方法?

SQL Server 2005 發生deadlock了,應該如何快速排除?

SQL Server Data Type Mappings (ADO.NET) (SQL Server對應ADO.net型別)

.net存取各資料庫的驅動程式Driver

請問資料表變數的自動編號如何歸零?

SQL Server 2008 Database Mail 實戰篇

MSDN討論:SqlCommand.Parameter雖很安全 但不太好用

Create Function 若..return table 有BEGIN是否需要 設定@t table 欄位名稱

 

新增一筆資料,取得新增資料的值:

CREATE TABLE [zz_test]
(
[timestampID] [timestamp] NOT NULL,
[identityID] [int] IDENTITY NOT NULL,
[guidID] [uniqueidentifier] NOT NULL,
[title] [varchar](50) NULL
primary key (guidID)
)


Insert into zz_test (title) values ('testData')
Select @@Identity As newIdentityID


Declare @t table /*儲存結果的變數*/
(
 
[identityID] [int] ,
[guidID] [uniqueidentifier] ,
[title] [varchar](50)
)

--timestamp類型的資料行無法OUTPUT into
Insert into zz_test (title)
OUTPUT inserted.[identityID],inserted.[guidID],inserted.title into @t
values ('TESTdata')

Select * from @t

 

請問 cte下是否可以用select @x=col1 from TB 來塞值 (列出跳號)

如何讀取 VARBINARY(BINARY) 資料型態的值(16進制轉成字串)

[SQL SERVER][Maintain]如何降級資料庫 by rico

如何利用「資料庫發行精靈」將新版 SQL 資料庫降級成舊版 by 保哥

亂數抽樣的語法

 

T-SQL巢裝迴圈Sample Code:


DECLARE @SysRoleID bigint --最外層要存放資料的變數
DECLARE @SysMenuID bigint --第二層要存放資料的變數
 
--宣告游標
DECLARE cursor1 cursor FOR SELECT ID As SysRoleID FROM SysRole
 
OPEN cursor1
FETCH cursor1 INTO @SysRoleID
WHILE @@fetch_status = 0
BEGIN
     
    DECLARE cursor2 cursor FOR SELECT ID As SysMenuID FROM SysMenus  
    OPEN cursor2
    FETCH cursor2 INTO @SysMenuID
    WHILE @@fetch_status = 0
    BEGIN
        -- 處理資料
		insert into [dbo].[SysRolePermission] (SysRoleID,SysMenuID,IsRead,IsEdit) Values (@SysRoleID,@SysMenuID,'True','True')


        FETCH cursor2 INTO @SysMenuID
    END
    CLOSE cursor2
    DEALLOCATE cursor2
 
    FETCH cursor1 INTO @SysRoleID
END
 
CLOSE cursor1
DEALLOCATE cursor1


 

 

看某張Table有哪些foreign Key的語法(刪表刪資料很有用 ):SQL DROP TABLE foreign key constraint