sqlserver 使用者定義表型別

2022-07-22 13:27:19 字數 1957 閱讀 8509

有時需要將記憶體中的表與資料庫中的表比較,比如datatable中有100行資料,需要判斷在資料庫中是否存在,這個時候我們就可以使用sqlserver中的【使用者 定義表型別】

這裡最最最重要的思路是把【使用者 定義表型別】當作一張虛擬的正常表去處理

需求:現在記憶體中有個datatable,資料庫中有張表【tempuser】,需要在記憶體中取出 datatable和【tempuser】相同id的tempuser的資訊

實現:1、新建表

create

table

tempuser(

id int

notnull

identity(1,1) primary

key,

name

nvarchar(100

),age

int)

insert tempuser values('

a',1

)insert tempuser values('

b',2

)insert tempuser values('

c',3)

2、新建【使用者表型別】

create type temp_20190915 as

table

( id

int)

3、新建儲存過程

create

proc proc_test_20190915(@temp_20190915

temp_20190915 readonly)

asbegin

select b.*

from

@temp_20190915 a join tempuser b on a.id=b.idend

注意事項:儲存過程的引數型別是剛剛新建的【使用者表型別】並且是唯讀的

此時在儲存過程中我們可以把【使用者表型別】當作一張正常表的去處理需要的資料(注意是唯讀)

4、記憶體中構建我們的datatable

var data = new

datatable();

data.columns.add("id

", typeof(int

));var row1 =data.newrow();

row1["id

"] = 1

;data.rows.add(row1);

var row2 =data.newrow();

row2["id

"] = 2

; data.rows.add(row2);

5、呼叫儲存過程

var p = new system.data.sqlclient.sqlparameter[1

];p[

0] = new system.data.sqlclient.sqlparameter("

@temp_20190915

", data);

var data= comm.tool.dbhelper.execprocdataset("

proc_test_20190915

", p, "資料庫連線

").tables[0];

1

public

static dataset execprocdataset(string procname, sqlparameter parameters, string

connstr)

214 }

execprocdataset

6、除錯可以看到data就是我們需要的資料

總結:【使用者 定義表型別】的方便之處就是可以將記憶體中datatable很好的很資料庫中的表結合

SQL SERVER臨時表定義

資料庫 sql server2008 情況 建立臨時表 方式1 用create方式,跟正常建立表一樣,表名用 開頭,建立完重新整理庫,不顯示 begin 建立臨時表 create table temp name varchar 20 id int 操作臨時表資料,看情況需要 select from ...

SQL server 定義基本表

use dbcreate table 所有者.表名 列名 資料型別 列完整性約束 列名 資料型別 列完整性約束 表完整性約束 on create table person id char 16 not null primary key,新增主鍵 name char 5 not null nchar ...

SQL Server 使用者自定義函式

除了使用系統提供的函式外,使用者還可以根據需要自定義函式。使用者自定義函式是 sql server 2000 新增的資料庫物件,是 sql server 的一大改進。與程式語言中的函式類似,microsoft sql server 使用者定義函式是接受引數 執行操作 例如複雜計算 並將操作結果以值的...