㈠ sqlserver char 對應c#什麼類型
sqlserver char 對應c#的string類型 其它類型可以參看一下下面的對應關系
SQL Server類型 C#類型
bit bool
tinyint byte
smallint short
int int
bigint long
real float
float double
money decimal
datetime DateTime
char string
varchar string
nchar string
nvarchar string
text string
ntext string
image byte[]
binary byte[]
uniqueidentifier Guid
㈡ sqlserver怎麼用sql查看具體那個表被鎖住了
查看被鎖表:
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT'
--spid 鎖表進程
--tableName 被鎖表名
解鎖:
declare @spid int
Set @spid = 57 --鎖表進程
declare @sql varchar(1000)
set @sql='kill '+cast(@spid as varchar)
exec(@sql)
--查詢出死鎖的SPID
select blocked
from (select * from sysprocesses where blocked>0 ) a
where not exists(select * from (select * from sysprocesses where blocked>0 ) b
where a.blocked=spid)
--輸出引起死鎖的操作
DBCC INPUTBUFFER (@spid)
--查詢當前進程數
select count(-1) from sysprocesses
where dbid in (select dbid from sysdatabases where name like '%telcount%');
㈢ sqlserver 排序規則的問題
alter table [表名] alter column [列名] [類型] COLLATE Chinese_PRC_CI_AS
[類型] 最好選用 nvarchar,nchar
存儲數據時如果出現亂碼,可能情況如下:
1.提交到資料庫的字元是亂碼
2. 資料庫排序規則不支持該字元集
3.資料庫表欄位的類型設計不合適,最好選用nvarchar,nchar
4.插入字元串時強制存儲格式 insert into [表名] ([欄位1]) values(N'字元串'),最好在字元串前指定 N
㈣ sqlserver資料庫varchar(40)能存放多少漢字
sqlserver資料庫varchar(40)能存放20個漢字。
sqlserver資料庫中,英文字元需佔用一個位元組存儲,漢字和其他非英文字元,需佔用兩個位元組存儲。向一個長度為40個字元的varchar型欄位中輸入漢字,最多可輸入20個漢字。當從這個欄位中取出數據時,數據其長度為20個漢字,40個字元。
(4)sqlservernchar擴展閱讀:
VARCHAR(M)比CHAR更加的靈活,同樣用於表示字元數據,但是VARCHAR可以保存可變長度的字元串。其中M代表該數據類型所允許保存的字元串的最大長度,只要長度小於該最大值的字元串都可以被保存在該數據類型中。
使用VARCHAR型欄位要比CHAR型欄位方便的多。使用VARCHAR型欄位時,不需要為剪掉數據中多餘的空格而操心。它可以比CHAR型欄位佔用更少的內存和硬碟空間。當資料庫很大時,這種內存和磁碟空間的節省會變得非常重要。
參考資料來源:
網路——varchar
網路——字長
㈤ sqlserver中的nvarchar和varchar的區別
在進行sql
server資料庫設計的時候,我們發現有幾種數據類型是以「n」開頭的,還有幾種對應不是以「n」開頭的數據類型,我們以nvarchar和varchar為例,看看它們到底有什麼區別。
在進行sql
server資料庫設計的時候,我們發現有幾種數據類型是以「n」開頭的,比如nchar,nvarchar,ntext等,還有幾種對應不是以「n」開頭的數據類型,比如char,varchar,text等,程序讀寫資料庫的時候,它們好像沒什麼區別,是不是用哪種數據類型都可以呢?下面我們以nvarchar和varchar為例,看看它們到底有什麼區別。
首先,我們來看下nvarchar和varchar的官方幫助里的說明:
varchar(n)
長度為
n
個位元組的可變長度且非
unicode
的字元數據,n
必須是一個介於
1
和
8,000
之間的數值,存儲大小為輸入數據的位元組的實際長度,而不是
n
個位元組,所輸入的數據字元長度可以為零,varchar
在
sql-92
中的同義詞為
char
varying
或
character
varying。
nvarchar(n)
包含
n
個字元的可變長度
unicode
字元數據,n
的值必須介於
1
與
4,000
之間,位元組的存儲大小是所輸入字元個數的兩倍,所輸入的數據字元長度可以為零,nvarchar
在
sql-92
中的同義詞為
national
char
varying
和
national
character
varying。
看來兩種數據類型是有區別的,那麼該如何選擇兩種數據類型呢?
首先,varchar和nvarchar都能存儲漢字,區別在於:一個漢字佔varchar(2),只佔nvarchar(1),而字母只佔varchar(1),那麼在資料庫欄位求長度的時候,用varchar就不一定知道它確切有幾個字元,如果用nvarchar,漢字也是nvarchar(1),字母也是nvarchar(1),那麼很容易知道欄位的長度了。
其次,varchar的檢索快於nvarchar,varchar在sql
server中是採用單位元組來存儲數據的,nvarchar是使用unicode來存儲數據的,中文字元存儲到sql
server中會保存為兩個位元組(一般採用unicode編碼),英文字元保存到資料庫中,如果欄位的類型為varchar,則只會佔用一個位元組,而如果欄位的類型為nvarchar,則會佔用兩個位元組。正常情況下,我們使用varchar也可以存儲中文字元,但是如果遇到操作系統是英文操作系統並且對中文字體的支持不全面時,在sql
server存儲中文字元為varchar就會出現亂碼(顯示為??),而且正常情況下,主機都會支持中文,所以如果使用varchar來存儲數據,在開發階段是發現不了問題的,多數情況下,在布署的時候也不會有問題,但是,如果布署的主機是英文操作系統,並且不支持中文,那問題就出來了,所有的varchar欄位在存儲中文的時候都會變成亂碼(顯示為??),而且一般情況下你不會知道這是因為你採用了錯誤的數據類型造成的,你會試著去裝中文字體,試著去設置操作系統的語言環境,這些都不能解決問題,唯一能解決問題的方法是把資料庫欄位的類型改為nvarchar(或者nchar),對項目管理比較熟悉的朋友應該都知道,到布署階段再來修改資料庫是一件很恐怖的事情。
第三,使用nvarchar的另一個好處就是在判斷字元串的時候可以不需要考慮中英文兩種字元的差別,當然,使用nvarchar存儲英文字元會增大一倍的存儲空間,但是在存儲代價已經很低廉的情況下,優先考慮兼容性會給你帶來更多好處,所以在設計的時候應該盡量使用nvarchar來存儲數據,只有在你確保該欄位不會存儲中文的時候,再採用varchar來存儲。
㈥ sqlserver的數據類型
sqlserver的數據類型比較多,常用的包括:
第一大類:整數數據
bit:bit數據類型代表0,1或NULL,就是表示true,false.佔用1byte.
int:以4個位元組來存儲正負數.可存儲范圍為:-2^31至2^31-1.
smallint:以2個位元組來存儲正負數.存儲范圍為:-2^15至2^15-1
tinyint: 是最小的整數類型,僅用1位元組,范圍:0至此^8-1
第二大類:精確數值數據
numeric:表示的數字可以達到38位,存儲數據時所用的位元組數目會隨著使用權用位數的多少變化.
decimal:和numeric差不多
第三大類:近似浮點數值數據
float:用8個位元組來存儲數據.最多可為53位.范圍為:-1.79E+308至1.79E+308.
real:位數為24,用4個位元組,數字范圍:-3.04E+38至3.04E+38
第四大類:日期時間數據
datatime:表示時間范圍可以表示從1753/1/1至9999/12/31,時間可以表示到3.33/1000秒.使用8個位元組.
smalldatetime:表示時間范圍可以表示從1900/1/1至2079/12/31.使用4個位元組.
第五大類:字元串數據
char:長度是設定的,最短為1位元組,最長為8000個位元組.不足的長度會用空白補上.
varchar:長度也是設定的,最短為1位元組,最長為8000個位元組,尾部的空白會去掉.
text:長寬也是設定的,最長可以存放2G的數據.
第六大類:Unincode字元串數據
nchar:長度是設定的,最短為1位元組,最長為4000個位元組.不足的長度會用空白補上.儲存一個字元需要2個位元組.
nvarchar:長度是設定的,最短為1位元組,最長為4000個位元組.尾部的空白會去掉.儲存一個字元需要2個位元組.
ntext:長度是設定的,最短為1位元組,最長為2G.尾部的空白會去掉,儲存一個字元需要2個位元組.
第七大類:貨幣數據類型
money:記錄金額范圍為:-92233720368577.5808至92233720368577.5807.需要8 個位元組.
smallmoney:記錄金額范圍為:-214748.3648至214748.36487.需要4個位元組.
第八大類:標記數據
timestamp:該數據類型在每一個表中是唯一的!當表中的一個記錄更改時,該記錄的timestamp欄位會自動更新.
uniqueidentifier:用於識別資料庫裡面許多個表的唯一一個記錄.
第九大類:二進制碼字元串數據
binary:固定長度的二進制碼字元串欄位,最短為1,最長為8000.
varbinary:與binary差異為數據尾部是00時,varbinary會將其去掉
image:為可變長度的二進制碼字元串,最長2G.
㈦ SqlServer函數的字元串函數
1 字元串函數
1.1 長度與分析用
datalength(Char_expr) 返回字元串包含字元數,但不包含後面的空格
substring(expression,start,length) 不多說了,取子串
right(char_expr,int_expr) 返回字元串右邊int_expr個字元
1.2 字元操作類
upper(char_expr) 轉為大寫
lower(char_expr) 轉為小寫
space(int_expr) 生成int_expr個空格
replicate(char_expr,int_expr)復制字元串int_expr次
reverse(char_expr) 反轉字元串
stuff(char_expr1,start,length,char_expr2) 將字元串char_expr1中的從
start開始的length個字元用char_expr2代替
ltrim(char_expr) rtrim(char_expr) 取掉空格
ascii(char) char(ascii) 兩函數對應,取ascii碼,根據ascii碼取字元
1.3 字元串查找
charindex(char_expr,expression) 返回char_expr的起始位置
patindex(%pattern%,expression) 返回指定模式的起始位置,否則為0
㈧ 如何在Hibernate中讓SQLServer使用nvarchar代替varchar
有關SQLServer中varchar和nvarchar的區別可以直接去google。一般在中文系統中應該使用nvarchar作為字元串的對應類型,但是Hibernate中的默認實現SQLServerDialect使用了varchar。以下方法可以簡單地轉為使用nvarchar:
自己寫一個dialect,繼承SQLServerDialect,在構造器中將原先varchar類型的注冊聲明覆蓋:
registerColumnType(Types.VARCHAR, "nvarchar($l)");
千萬注意,「$」後面的是欄位長度的佔位符,是「l(ength)」,而不是數字「1」(因為看hibernate的doc時沒分清「l」和「1」,浪費了我一上午去找原因)
然後在hibernate的配置文件中將hibernate.dialect的值設為你的dialect實現類就OK了
㈨ SQLserver怎麼獲取當前操作資料庫的計算機名字
在SQLServer上得到客戶端信息(操作的資料庫名,計算機名,用戶名,網卡物理地址,IP地址,程序名)
create proc p_getlinkinfo
@dbname sysname=null,--要查詢的資料庫名,默認查詢所有資料庫的連接信息
@includeip bit=0--是否顯示IP地址,因為查詢IP地址比較費時,所以增加此控制
as
declare @dbid int
set @dbid=db_id(@dbname)
create table #tb(id int identity(1,1),dbname sysname,hostname nchar(128),loginname nchar(128),net_address nchar(12),net_ip nvarchar(15),prog_name nchar(128))
insert into #tb(hostname,dbname,net_address,loginname,prog_name)
select distinct hostname,db_name(dbid),net_address,loginame,program_name from master..sysprocesses
where hostname<>'' and (@dbid is null or )
if @includeip=0 goto lb_show --如果不顯示IP地址,就直接顯示
declare @sql varchar(500),@hostname nchar(128),@id int
create table #ip(hostname nchar(128),a varchar(200))
declare tb cursor local for select distinct hostname from #tb
open tb
fetch next from tb into @hostname
while @@fetch_status=0
begin
set @sql='ping '+@hostname+' -a -n 1 -l 1'
insert #ip(a) exec master..xp_cmdshell @sql
update #ip set where hostname is null
fetch next from tb into @hostname
end
update #tb set net_ip=left(a,patindex('%:%',a)-1)
from #tb a inner join (
select hostname,a=substring(a,patindex('Ping statistics for %:%',a)+20,20) from #ip
where a like 'Ping statistics for %:%') b on a.hostname=b.hostname
lb_show:
select id,資料庫名=dbname,客戶機名=hostname,用戶名=loginname
,網卡物理地址=net_address,IP地址=net_ip,應用程序名稱=prog_name from #tb
GO
//顯示所有本機的連接信息:
exec p_getlinkinfo
//顯示所有本機的連接信息,包含ip地址:
exec p_getlinkinfo @includeip=1
//顯示連接指定資料庫的信息:
exec p_getlinkinfo @dbname=表名,@includeip=1
㈩ sqlserver語句中*=是什麼作用
左連接的意思。就是A表裡的item_no所有記錄通通出現,即使和B表裡面item_no相等的記錄也會出現,B表相應的欄位顯示空。