預存程序和函數的不同
轉貼於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 |
沒有時,仍要有() |
沒有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
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 列转行(UNPIVOT)
如何把 SQL Server 標準版當成 SQL Server Express 來用(別名使用時機)
使用SQL Linked Server 簡化跨資料庫查詢
如何在 SQL 2005 中設定連結的伺服器(Linked Server)
多数据库查询即数据筛选问题!
Select * from TableName Where ColumnName in (@c) 變數@c的技巧&問題
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 系統安裝錯誤,安裝失敗大集合。 - 混亂,逐漸擴散~- 點部落
SQL 分頁 by mis2000Lab 整理
動態將多筆資料的特定欄位依分隔符號組成字串 by TerryChuang
使用遞迴CTE拆解用特定間隔符號所組成的字串 by TerryChuang
[SQL]將多筆資料中某一列的資料作為一列顯示 by亂馬客
MSDN討論:抓取後面幾筆
[SQL] 於多筆重複資料中取得該重複群組中最新一筆資料、論壇上的應用:查第一筆資料
SQL-CLR 型別對應 (LINQ to SQL)、對應 CLR 參數資料
使用C#連結MS SQL 的程式,本機是否也要安裝SQL SERVER才行?
SQL Server 2005 發生deadlock了,應該如何快速排除?
SQL Server Data Type Mappings (ADO.NET) (SQL Server對應ADO.net型別)
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