校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 一些 T-SQL 技巧

一些 T-SQL 技巧

熱門標簽:四川穩定外呼系統公司 電話機器人接口是什么樣的 沈陽外呼系統有效果嗎 商家地圖標注圖片 百度地圖標注信息怎么修改 AI智能云呼電話機器人怎么注冊 怎么在高德地圖標注多個點 溫州語音外呼系統排名 福州外呼系統招商
一、 只復制一個表結構,不復制數據

    select top 0 * into [t1] from [t2]

    二、 獲取數據庫中某個對象的創建腳本

    1、 先用下面的腳本創建一個函數

    if exists(select 1 from sysobjects where id=object_id('fgetscript') and objectproperty(id,'IsInlineFunction')=0)
     drop function fgetscript
    go

    create function fgetscript(
     @servername varchar(50)     --服務器名
     ,@userid varchar(50)='sa'    --用戶名,如果為nt驗證方式,則為空
     ,@password varchar(50)=''    --密碼
     ,@databasename varchar(50)    --數據庫名稱
     ,@objectname varchar(250)    --對象名

    ) returns varchar(8000)
    as
    begin
     declare @re varchar(8000)        --返回腳本
     declare @srvid int,@dbsid int       --定義服務器、數據庫集id
     declare @dbid int,@tbid int        --數據庫、表id
     declare @err int,@src varchar(255), @desc varchar(255) --錯誤處理變量

    --創建sqldmo對象
     exec @err=sp_oacreate 'sqldmo.sqlserver',@srvid output
     if @err〈〉0 goto lberr

    --連接服務器
     if isnull(@userid,'')='' --如果是 Nt驗證方式
     begin
      exec @err=sp_oasetproperty @srvid,'loginsecure',1
      if @err〈〉0 goto lberr

      exec @err=sp_oamethod @srvid,'connect',null,@servername
     end
     else
      exec @err=sp_oamethod @srvid,'connect',null,@servername,@userid,@password

     if @err〈〉0 goto lberr

    --獲取數據庫集
     exec @err=sp_oagetproperty @srvid,'databases',@dbsid output
     if @err〈〉0 goto lberr

    --獲取要取得腳本的數據庫id
     exec @err=sp_oamethod @dbsid,'item',@dbid output,@databasename
     if @err〈〉0 goto lberr

    --獲取要取得腳本的對象id
     exec @err=sp_oamethod @dbid,'getobjectbyname',@tbid output,@objectname
     if @err〈〉0 goto lberr

    --取得腳本
     exec @err=sp_oamethod @tbid,'script',@re output
     if @err〈〉0 goto lberr

     --print @re
     return(@re)

    lberr:
     exec sp_oageterrorinfo NULL, @src out, @desc out
     declare @errb varbinary(4)
     set @errb=cast(@err as varbinary(4))
     exec master..xp_varbintohexstr @errb,@re out
     set @re='錯誤號: '+@re
       +char(13)+'錯誤源: '+@src
       +char(13)+'錯誤描述: '+@desc
     return(@re)
    end
    go


    2、 用法如下
    用法如下,

    print dbo.fgetscript('服務器名','用戶名','密碼','數據庫名','表名或其它對象名')

    3、 如果要獲取庫里所有對象的腳本,如如下方式

    declare @name varchar(250)
    declare #aa cursor for
     select name from sysobjects where xtype not in('S','PK','D','X','L')
    open #aa
    fetch next from #aa into @name
    while @@fetch_status=0
    begin
     print dbo.fgetscript('onlytiancai','sa','sa','database',@name)
     fetch next from #aa into @name
    end
    close #aa
    deallocate #aa

    4、 聲明,此函數是csdn鄒建鄒老大提供的
    三、 分隔字符串
    如果有一個用逗號分割開的字符串,比如說“a,b,c,d,1,2,3,4“,如何用t-sql獲取這個字符串有幾個元素,獲取第幾個元素的值是多少呢?因為t-sql里沒有split函數,也沒有數組的概念,所以只能自己寫幾個函數了。
    1、 獲取元素個數的函數

    create function getstrarrlength (@str varchar(8000))
    returns int
    as
    begin
      declare @int_return int
      declare @start int
      declare @next int
      declare @location int
      select @str =','+ @str +','
      select @str=replace(@str,',,',',')
      select @start =1
      select @next =1
      select @location = charindex(',',@str,@start)
      while (@location 〈〉0)
      begin
        select @start = @location +1
        select @location = charindex(',',@str,@start)
        select @next =@next +1
      end
     select @int_return = @next-2
     return @int_return
    end

    2、 獲取指定索引的值的函數

    create function getstrofindex (@str varchar(8000),@index int =0)
    returns varchar(8000)
    as
    begin
      declare @str_return varchar(8000)
      declare @start int
      declare @next int
      declare @location int
      select @start =1
      select @next =1 --如果習慣從0開始則select @next =0
      select @location = charindex(',',@str,@start)
      while (@location 〈〉0 and @index 〉 @next )
      begin
        select @start = @location +1
        select @location = charindex(',',@str,@start)
        select @next =@next +1
      end
      if @location =0 select @location =len(@str)+1 --如果是因為沒有逗號退出,則認為逗號在字符串后
      select @str_return = substring(@str,@start,@location -@start) --@start肯定是逗號之后的位置或者就是初始值1
      if (@index 〈〉 @next ) select @str_return = '' --如果二者不相等,則是因為逗號太少,或者@index小于@next的初始值1。
      return @str_return
    end

    3、 測試

    SELECT [dbo].[getstrarrlength]('1,2,3,4,a,b,c,d')
    SELECT [dbo].[getstrofindex]('1,2,3,4,a,b,c,d',5)

    四、 一條語句執行跨越若干個數據庫
    我要在一條語句里操作不同的服務器上的不同的數據庫里的不同的表,怎么辦呢?
    第一種方法:


    select * from OPENDATASOURCE('SQLOLEDB','Data Source=遠程ip;User ID=sa;Password=密碼').庫名.dbo.表名

    第二種方法:
    先使用聯結服務器:


    EXEC sp_addlinkedserver '別名','','MSDASQL',NULL,NULL,'DRIVER={SQL Server};SERVER=遠程名;UID=用戶;PWD=密碼;'
    exec sp_addlinkedsrvlogin  @rmtsrvname='別名',@useself='false',@locallogin='sa',@rmtuser='sa',@rmtpassword='密碼'
    GO

    然后你就可以如下:

    select * from 別名.庫名.dbo.表名
    insert 庫名.dbo.表名 select * from 別名.庫名.dbo.表名
    select * into 庫名.dbo.新表名 from 別名.庫名.dbo.表名
    go

    五、 怎樣獲取一個表中所有的字段信息
    蛙蛙推薦:怎樣獲取一個表中所有字段的信息
    先創建一個視圖

    Create view fielddesc
    as
    select o.name as table_name,c.name as field_name,t.name as type,c.length as

    length,c.isnullable as isnullable,convert(varchar(30),p.value) as desp
    from syscolumns c
    join systypes t on c.xtype = t.xusertype
    join sysobjects o on o.id=c.id
    left join    sysproperties p on p.smallid=c.colid and p.id=o.id
    where o.xtype='U'


    查詢時:

    Select * from fielddesc where table_name = '你的表名'


    還有個更強的語句,是鄒建寫的,也寫出來吧

    SELECT
     (case when a.colorder=1 then d.name else '' end) N'表名',
     a.colorder N'字段序號',
     a.name N'字段名',
     (case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '√'else '' end) N'標識',
     (case when (SELECT count(*)
     FROM sysobjects
     WHERE (name in
               (SELECT name
              FROM sysindexes
              WHERE (id = a.id) AND (indid in
                        (SELECT indid
                       FROM sysindexkeys
                       WHERE (id = a.id) AND (colid in
                                 (SELECT colid
                                FROM syscolumns
                                WHERE (id = a.id) AND (name = a.name))))))) AND
            (xtype = 'PK'))〉0 then '√' else '' end) N'主鍵',
     b.name N'類型',
     a.length N'占用字節數',
     COLUMNPROPERTY(a.id,a.name,'PRECISION') as N'長度',
     isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as N'小數位數',
     (case when a.isnullable=1 then '√'else '' end) N'允許空',
     isnull(e.text,'') N'默認值',
     isnull(g.[value],'') AS N'字段說明'
    --into ##tx

    FROM  syscolumns  a left join systypes b
    on  a.xtype=b.xusertype
    inner join sysobjects d
    on a.id=d.id  and  d.xtype='U' and  d.name〈〉'dtproperties'
    left join syscomments e
    on a.cdefault=e.id
    left join sysproperties g
    on a.id=g.id AND a.colid = g.smallid
    order by object_name(a.id),a.colorder


    六、 時間格式轉換問題

    因為新開發的軟件需要用一些舊軟件生成的一些數據,在時間格式上不統一,只能手工轉換,研究了一下午寫了三條語句,以前沒怎么用過convert函數和case語句,還有“+“操作符在不同上下文環境也會起到不同的作用,把我搞暈了要,不過現在看來是差不多弄好了。

    1、把所有“70.07.06“這樣的值變成“1970-07-06“

    UPDATE lvshi
    SET shengri = '19' + REPLACE(shengri, '.', '-')
    WHERE (zhiyezheng = '139770070153')


    2、在“1970-07-06“里提取“70“,“07“,“06“

    SELECT SUBSTRING(shengri, 3, 2) AS year, SUBSTRING(shengri, 6, 2) AS month,
          SUBSTRING(shengri, 9, 2) AS day
    FROM lvshi
    WHERE (zhiyezheng = '139770070153')

    3、把一個時間類型字段轉換成“1970-07-06“

    UPDATE lvshi
    SET shenling = CONVERT(varchar(4), YEAR(shenling))
          + '-' + CASE WHEN LEN(MONTH(shenling)) = 1 THEN '0' + CONVERT(varchar(2),
          month(shenling)) ELSE CONVERT(varchar(2), month(shenling))
          END + '-' + CASE WHEN LEN(day(shenling)) = 1 THEN '0' + CONVERT(char(2),
          day(shenling)) ELSE CONVERT(varchar(2), day(shenling)) END
    WHERE (zhiyezheng = '139770070153')

    七、 分區視圖

    分區視圖是提高查詢性能的一個很好的辦法

    --看下面的示例

    --示例表
    create table tempdb.dbo.t_10(
    id int primary key check(id between 1 and 10),name varchar(10))

    create table pubs.dbo.t_20(
    id int primary key check(id between 11 and 20),name varchar(10))

    create table northwind.dbo.t_30(
    id int primary key check(id between 21 and 30),name varchar(10))
    go

    --分區視圖
    create view v_t
    as
    select * from tempdb.dbo.t_10
    union all
    select * from pubs.dbo.t_20
    union all
    select * from northwind.dbo.t_30
    go

    --插入數據
    insert v_t select 1 ,'aa'
    union  all select 2 ,'bb'
    union  all select 11,'cc'
    union  all select 12,'dd'
    union  all select 21,'ee'
    union  all select 22,'ff'

    --更新數據
    update v_t set name=name+'_更新' where right(id,1)=1

    --刪除測試
    delete from v_t where right(id,1)=2

    --顯示結果
    select * from v_t
    go

    --刪除測試
    drop table northwind.dbo.t_30,pubs.dbo.t_20,tempdb.dbo.t_10
    drop view v_t

    /**//*--測試結果

    id          name
    ----------- ----------
    1           aa_更新
    11          cc_更新
    21          ee_更新

    (所影響的行數為 3 行)
    ==*/


    八、 樹型的實現

    --參考

    --樹形數據查詢示例
    --作者: 鄒建

    --示例數據
    create table [tb]([id] int identity(1,1),[pid] int,name varchar(20))
    insert [tb] select 0,'中國'
    union  all  select 0,'美國'
    union  all  select 0,'加拿大'
    union  all  select 1,'北京'
    union  all  select 1,'上海'
    union  all  select 1,'江蘇'
    union  all  select 6,'蘇州'
    union  all  select 7,'常熟'
    union  all  select 6,'南京'
    union  all  select 6,'無錫'
    union  all  select 2,'紐約'
    union  all  select 2,'舊金山'
    go

    --查詢指定id的所有子
    create function f_cid(
    @id int
    )returns @re table([id] int,[level] int)
    as
    begin
     declare @l int
     set @l=0
     insert @re select @id,@l
     while @@rowcount〉0
     begin
      set @l=@l+1
      insert @re select a.[id],@l
      from [tb] a,@re b
      where a.[pid]=b.[id] and b.[level]=@l-1
     end
    /**//**//**//*--如果只顯示最明細的子(下面沒有子),則加上這個刪除
     delete a from @re a
     where exists(
      select 1 from [tb] where [pid]=a.[id])
    --*/
     return
    end
    go

    --調用(查詢所有的子)
    select a.*,層次=b.[level] from [tb] a,f_cid(2)b where a.[id]=b.[id]
    go

    --刪除測試
    drop table [tb]
    drop function f_cid
    go

    九、 排序問題

    CREATE TABLE [t] (
     [id] [int] IDENTITY (1, 1) NOT NULL ,
     [GUID] [uniqueidentifier] NULL
    ) ON [PRIMARY]
    GO

    下面這句執行5次


    insert t values (newid())

    查看執行結果


    select * from t

    1、 第一種

    select * from t
     order by case id when 4 then 1
                      when 5 then 2
                      when 1 then 3
                      when 2 then 4
                      when 3 then 5 end

    2、 第二種

    select * from t order by (id+2)%6

    3、 第三種

    select * from t order by charindex(cast(id as varchar),'45123')

    4、 第四種

    select * from t
    WHERE id between 0 and 5
    order by charindex(cast(id as varchar),'45123')

    5、 第五種

    select * from t order by case when id 〉3 then id-5 else id end

    6、 第六種

    select * from t order by id / 4 desc,id asc


    十、 一條語句刪除一批記錄
    首先id列是int標識類類型,然后刪除ID值為5,6,8,9,10,11的列,這里的cast函數不能用convert函數代替,而且轉換的類型必須是varchar,而不能是char,否則就會執行出你不希望的結果,這里的“5,6,8,9,10,11“可以是你在頁面上獲取的一個chkboxlist構建成的值,然后用下面的一句就全部刪
    除了,比循環用多條語句高效吧應該。

    delete from [fujian] where charindex(','+cast([id] as varchar)+',',','+'5,6,8,9,10,11,'+',')〉0

    還有一種就是

    delete from table1 where id in(1,2,3,4 )

    十一、獲取子表內的一列數據的組合字符串
    下面這個函數獲取05年已經注冊了的某個所的律師,唯一一個參數就是事務所的名稱,然后返回zhuce字段里包含05字樣的所有律師。


    CREATE   FUNCTION fn_Get05LvshiNameBySuo  (@p_suo Nvarchar(50))
    RETURNS Nvarchar(2000)
    AS
    BEGIN
     DECLARE @LvshiNames varchar(2000), @name varchar(50)
     select @LvshiNames=''
     DECLARE lvshi_cursor CURSOR FOR
    數據庫里有1,2,3,4,5 共5條記錄,要用一條sql語句讓其排序,使它排列成4,5,1,2,3,怎么寫? 
您可能感興趣的文章:
  • sqlserver2005 TSql新功能學習總結(數據類型篇)
  • 如何在SQL Server 2008下輕松調試T-SQL語句和存儲過程
  • SQLServer 2008 新增T-SQL 簡寫語法
  • SQL Server 數據庫管理常用的SQL和T-SQL語句
  • 通過T-SQL語句實現數據庫備份與還原的代碼
  • SQL Server 數據庫管理常用的SQL和T-SQL語句
  • T-SQL中使用正則表達式函數
  • T-SQL篇如何防止SQL注入的解決方法
  • T-SQL 查詢語句的執行順序解析
  • SQL Server中T-SQL 數據類型轉換詳解

標簽:無錫 七臺河 邯鄲 來賓 汕尾 寶雞 西寧 營口

巨人網絡通訊聲明:本文標題《一些 T-SQL 技巧》,本文關鍵詞  一些,T-SQL,技巧,一些,T-SQL,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《一些 T-SQL 技巧》相關的同類信息!
  • 本頁收集關于一些 T-SQL 技巧的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    中文字幕免费不卡| 欧美日韩视频在线一区二区| 伊人色综合久久天天人手人婷| 日韩毛片精品高清免费| 日韩国产欧美在线观看| 国产精品99久久久| 色欧美片视频在线观看在线视频| 日韩三级免费观看| 亚洲免费av网站| 国产精品自在欧美一区| 欧美日韩精品一区二区三区蜜桃 | 国产99一区视频免费| 91久久线看在观草草青青| 精品女同一区二区| 日日摸夜夜添夜夜添精品视频| 99精品国产热久久91蜜凸| 久久久久久久久久久99999| 日韩中文字幕区一区有砖一区| 国产电影精品久久禁18| 日韩精品中文字幕一区| 日韩电影在线观看一区| 中文字幕中文乱码欧美一区二区 | 中文久久乱码一区二区| 蜜臀久久99精品久久久久久9| 欧美亚一区二区| 亚洲精品欧美综合四区| 成人激情文学综合网| 久久久久97国产精华液好用吗| 麻豆精品久久久| 日韩欧美国产一区二区在线播放| 视频一区视频二区中文字幕| 精品污污网站免费看| 一区二区三区欧美亚洲| 日本韩国精品在线| 一区二区三区日韩精品视频| 在线看一区二区| 亚洲午夜一区二区| 欧美卡1卡2卡| 久久精品国产99国产精品| 日韩美女一区二区三区| 久久精品av麻豆的观看方式| 欧美成人精品3d动漫h| 在线视频一区二区三区| 国产精品自在欧美一区| 欧美α欧美αv大片| 亚洲精品国产精华液| 91网站在线观看视频| 亚洲欧美日韩国产成人精品影院| 91蝌蚪porny成人天涯| 亚洲精品一二三四区| 欧美性猛交xxxx乱大交退制版| 亚洲免费观看高清完整版在线观看熊 | 中文字幕在线观看一区| 成人av先锋影音| 一区二区高清视频在线观看| 欧美剧情电影在线观看完整版免费励志电影| 亚洲综合久久av| 日韩一级黄色片| 成人午夜视频在线| 一区二区三区四区国产精品| 欧美日本国产一区| 国产亚洲精品7777| 成人国产在线观看| 一区二区久久久| 欧美日韩成人在线| 久久电影国产免费久久电影| 久久久久青草大香线综合精品| 99在线热播精品免费| 午夜国产不卡在线观看视频| 欧美大黄免费观看| 91污片在线观看| 蜜臀av一级做a爰片久久| 国产精品天干天干在观线| 色天天综合久久久久综合片| 狠狠色丁香婷婷综合| 国产精品的网站| 日韩欧美亚洲国产精品字幕久久久| 粉嫩av一区二区三区| 日本不卡一区二区三区| 国产精品美女久久久久高潮| 欧美丰满一区二区免费视频| www.亚洲人| 韩国女主播一区| 极品少妇一区二区三区精品视频 | 一区二区在线观看免费视频播放| 欧美系列亚洲系列| 国产不卡视频一区| 美女尤物国产一区| 亚洲影院免费观看| 中文字幕在线不卡视频| 欧美videossexotv100| 日本久久精品电影| 国产精品一区二区三区网站| 亚洲一区二区三区影院| 中文字幕一区不卡| 欧美成人一级视频| 欧美日本精品一区二区三区| 高清不卡一区二区| 亚洲不卡在线观看| 欧美一区二区在线免费观看| 色婷婷激情综合| 国产91精品精华液一区二区三区| 亚洲自拍偷拍网站| 中文字幕精品一区二区三区精品| 69久久夜色精品国产69蝌蚪网| 色又黄又爽网站www久久| 日韩—二三区免费观看av| 欧美一区二区在线不卡| 国产酒店精品激情| 亚洲一区二区四区蜜桃| 久久久综合视频| 欧美日韩国产在线播放网站| 成人精品视频一区| 极品少妇一区二区| 婷婷中文字幕综合| 亚洲综合色成人| 亚洲欧洲色图综合| 亚洲三级理论片| 最新日韩av在线| 中文字幕精品一区二区三区精品 | 亚洲亚洲精品在线观看| 精品国产乱码久久久久久免费 | 麻豆高清免费国产一区| 亚洲mv大片欧洲mv大片精品| 国产精品福利一区二区三区| 56国语精品自产拍在线观看| 欧美性猛交xxxx黑人交| 色老头久久综合| www.性欧美| 成人avav影音| 97精品国产97久久久久久久久久久久| 韩国女主播一区| 男人操女人的视频在线观看欧美| 亚洲福利视频一区| 视频在线观看一区二区三区| 亚洲综合久久久| 水野朝阳av一区二区三区| 天堂精品中文字幕在线| 日韩精品亚洲专区| 免费av成人在线| 免费三级欧美电影| 国产 日韩 欧美大片| 成人在线视频一区| 99这里只有久久精品视频| 97久久精品人人做人人爽50路 | 丝袜亚洲另类欧美综合| 日韩电影在线一区二区三区| 日本在线不卡视频一二三区| 视频一区二区不卡| 一区二区三区日韩欧美精品| 奇米影视在线99精品| 麻豆精品视频在线| 国产成人精品免费一区二区| 国产福利91精品一区二区三区| 国产成人福利片| 色婷婷av一区| 91女人视频在线观看| 欧美一卡二卡三卡四卡| 久久色.com| 亚洲女人的天堂| 日本美女一区二区三区| 国产精品一区二区久久不卡| 色天使久久综合网天天| 久久在线免费观看| 亚洲欧美日韩精品久久久久| 午夜成人在线视频| 成人久久视频在线观看| 精品视频在线免费看| 884aa四虎影成人精品一区| 亚洲精品一区二区三区香蕉| 一区二区三区四区在线免费观看| 成人黄色大片在线观看| 91性感美女视频| 欧美另类一区二区三区| 久久这里只精品最新地址| 亚洲精品日韩综合观看成人91| 爽好久久久欧美精品| 高清国产一区二区| 欧美日产在线观看| 国产精品成人午夜| 久久国产精品色婷婷| 色综合 综合色| 国产欧美日韩精品一区| 亚洲不卡在线观看| 成av人片一区二区| 国产日韩v精品一区二区| 午夜精品成人在线| 日本韩国精品在线| 国产欧美一二三区| 久久er99热精品一区二区| 不卡的电影网站| 国产片一区二区| 黄色日韩三级电影| 91丨九色porny丨蝌蚪| 久久色中文字幕| 极品少妇xxxx精品少妇偷拍| 欧美天天综合网| 亚洲人成网站色在线观看| 国产成人小视频| 欧美精品一区二区不卡|