亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

sql cast,convert,QUOTENAME,exec 函數學習記錄

2024-08-31 00:59:16
字體:
來源:轉載
供稿:網友

語法
使用 CAST:

CAST ( expression AS data_type )

使用 CONVERT:

CONVERT (data_type[(length)], expression [, style])

參數
expression

是任何有效的 Microsoft SQL Server" 表達式。有關更多信息,請參見表達式。

data_type

目標系統所提供的數據類型,包括 bigint 和 sql_variant。不能使用用戶定義的數據類型。有關可用的數據類型的更多信息,請參見數據類型。

length

nchar、nvarchar、char、varchar、binary 或 varbinary 數據類型的可選參數。

style

日期格式樣式,借以將 datetime 或 smalldatetime 數據轉換為字符數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型);或者字符串格式樣式,借以將 float、real、money 或 smallmoney 數據轉換為字符數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型)。



將某種數據類型的表達式顯式轉換為另一種數據類型。有關可用的數據類型的更多信息,請參見數據類型。日期格式樣式,借以將 datetime 或 smalldatetime 數據轉換為字符數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型);或者字符串格式樣式,借以將 float、real、money 或 smallmoney 數據轉換為字符數據(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數據類型)。當轉換為字符數據時輸出。
 

隱性轉換對于用戶是不可見的。
SQL Server 自動將數據從一種數據類型轉換成另一種數據類型。例如,如果一個 smallint 變量和一個 int 變量相比較,這個 smallint 變量在比較前即被隱性轉換成 int 變量。

顯式轉換使用 CAST 或 CONVERT 函數。
CAST 和 CONVERT 函數將數值從一個數據類型(局部變量、列或其它表達式)轉換到另一個數據類型。

例如,下面的 CAST 函數將數值 $157.27 轉換成字符串 ''$157.27'':CAST ( $157.27 AS VARCHAR(10) )
CAST 函數基于 SQL-92 標準并且優先于 CONVERT。

當從一個 SQL Server 對象的數據類型向另一個轉換時,一些隱性和顯式數據類型轉換是不支持的。例如,nchar 數值根本就不能被轉換成 image 數值。nchar 只能顯式地轉換成 binary,隱性地轉換到 binary 是不支持的。nchar 可以顯式地或者隱性地轉換成 nvarchar。

當處理 sql_variant 數據類型時,SQL Server 支持將具有其它數據類型的對象隱性轉換成 sql_variant 類型。然而,SQL Server 并不支持從 sql_variant 數據隱性地轉換到其它數據類型的對象。

 SELECT CONVERT(CHAR(10), CURRENT_TIMESTAMP, 102)

  (102表明使用了ANSI日期模式,即yy.mm.dd型)

  然而,如果你希望將這個變量明確生成為datetime或smalldatetime變量,以此在特定的數據庫欄中兼容,那么你可以使用以下語句:

  SELECT CAST(CONVERT(CHAR(10),CURRENT_TIMESTAMP,102) AS DATETIME

  返回值將是 yy.mm.dd 00:00:00(如12:00AM作為時間戳;

EXEC命令有兩個用法:執行一個存儲過程,或者執行一個動態批次。批次是一個內容為SQL語句的字符串。
    例如:
    declare @schemaName varchar(80),@tableName varchar(80),
        @objName varchar(512);
    set @schemaName='dbo';
    set @tableName='Orders';
    set @objName=@schemaName+'.'+@tableName;
    exec('select count(*) from '+@objName);

    注意,在exec的括號里,只允許是字符串變量、字符串常量存在。不允許在這里調用函數或者使用case表達式。
    下面的代碼是錯誤的:
        exec('select count(*) from '+quotename(@objName));

    所以,基本的方法是將語句保存到一個變量里,例如:
        set @sql='...';
        exec(@sql);
    這就不存在上述限制了。

    1 EXEC沒有接口
        Exec的唯一輸入是字符串。一個動態批次無權訪問調用它的批次內所定義的局部變量:
            declare @i int
            set @i=1;
            declare @sql varchar(255)
            set @sql='select * from dbo.orders where rderid=@i';
            exec(@sql);
        出錯:必須聲明標量變量@i
        原因還是@i不能放在''之內,它只能通過字符串連接動態的嵌入到SQL語句里:
            set @sql='select * from dbo.orders where rderid='+cast(@i as varchar(10));

        變量與字符串連接會引發所謂的SQL注入安全隱患,如果變量包含了字符串。要防患SQL注入的一個辦法是限制
    字符串的大小。
        這種連接會對性能造成映像。SS會為每個字符串單獨創建一個執行計劃,無論兩個字符串是否是一個模式。為此,
    下面顯示了一個例子:
        首先清除cache里的執行計劃:
            DBCC freeproccache;
        然后執行下面的代碼三次,分別將@i設置為10248,10249,10250
            DECLARE @i AS INT;
            SET @i = 10248;

            DECLARE @sql AS VARCHAR(52);
            SET @sql = 'SELECT * FROM dbo.Orders WHERE rderID = '
              + CAST(@i AS VARCHAR(10)) + N';';
            EXEC(@sql)
        最后查詢sys.syscacheobjects:
            SELECT cacheobjtype, objtype, usecounts, sql
            FROM sys.syscacheobjects
            WHERE sql NOT LIKE '%cache%'
              AND sql NOT LIKE '%sys.%';
        結果顯示為:
            它會為每次查詢生成一個執行計劃。以及一個參數化的執行計劃。

    EXEC也沒有輸出參數。缺省情況下,exec將返回該次查詢的輸出給調用者。如果希望將該結果保存到變量里,那就必須
使用Insert EXEC語法,并從表里從新讀取該數據,然后儲存到目標變量里。
    DECLARE
      @schemaname AS NVARCHAR(128),
      @tablename  AS NVARCHAR(128),
      @colname    AS NVARCHAR(128),
      @sql        AS NVARCHAR(805),
      @cnt       AS INT;

    SET @schemaname = N'dbo';
    SET @tablename  = N'Orders';
    SET @colname    = N'CustomerID';
    SET @sql = N'SELECT COUNT(DISTINCT '
      + QUOTENAME(@colname) + N') FROM '
      + QUOTENAME(@schemaname)
      + N'.'
      + QUOTENAME(@tablename)
      + N';';

    CREATE TABLE #T(cnt INT);
    INSERT INTO #T
      EXEC(@sql);
    SET @cnt = (SELECT cnt FROM #T);
    SELECT @cnt;
    DROP TABLE #T;

    注意如果忘記輸入最后的一條語句“Drop 。。?!?,那么就會出現下面的令人討厭的錯誤:
        數據庫中已存在名為 '#T' 的對象。

    在上面這段程序里,創建了一個臨時表,它對于動態批次是可見的。所以可以修改上面的程序為:
        SET @sql = N'INSERT INTO #T(cnt) SELECT COUNT(DISTINCT '
          + QUOTENAME(@colname) + N') FROM '
          + QUOTENAME(@schemaname)
          + N'.'
          + QUOTENAME(@tablename)
          + N';';

        CREATE TABLE #T(cnt INT);
        EXEC(@sql);
        SET @cnt = (SELECT cnt FROM #T);
        SELECT @cnt;
        DROP TABLE #T;
    因為EXEC的執行是在Create Table之后,所以Insert語句可以移到@sql的定義里。

    2 變量的連接
        在SS2000里,EXEC優于sp_executesql的一點是,它支持輸入的代碼長度要長一些。雖然,從技術上說后者的
    輸入代碼字符串是NTEXT類型,通常希望用一個局部變量來保存它。但是,局部變量是不能聲明成大對象類型的。
    所以,實際上sp_executesql的最大支持的字符串長度是Unicode字符串的長度(NVARCHAR,4000個字符)。而
    EXEC,則支持常規的字符串(VARCHAR),即8000個字符。
        而且,EXEC支持多個變量的連接,每個變量最大有8000個字符。

        不過在SS2005里,變量類型可以是VARCHAR(max),最大為2G。

    3 EXEC AT  
        這是05里的新語法。執行遠程主機上的動態SQL語句

加上 N 代表存入數據庫時以 Unicode 格式存儲。
N'string' 表示string是個Unicode字符串

Unicode 字符串的格式與普通字符串相似,但它前面有一個 N 標識符(N 代表 SQL-92 標準中的國際語言 (National Language))。N 前綴必須是大寫字母。例如,'Michél' 是字符串常量而 N'Michél' 則是 Unicode 常量。Unicode 常量被解釋為 Unicode 數據,并且不使用代碼頁進行計算。Unicode 常量確實有排序規則,主要用于控制比較和區分大小寫。為 Unicode 常量指派當前數據庫的默認排序規則,除非使用 COLLATE 子句為其指定了排序規則。Unicode 數據中的每個字符都使用兩個字節進行存儲,而字符數據中的每個字符則都使用一個字節進行存儲。有關更多信息,請參見使用 Unicode 數據。

Unicode 字符串常量支持增強的排序規則

數據庫名是一個標識符,表名也是一個標識符,在SQL SERVER中標識符分為兩類:

標識符有兩類:

常規標識符

符合標識符的格式規則。在 Transact-SQL 語句中使用常規標識符時不用將其分隔。

SELECT *FROM TableXWHERE KeyCol = 124

分隔標識符

包含在雙引號 (") 或者方括號 ([ ]) 內。符合標識符格式規則的標識符可以分隔,也可以不分隔。

SELECT *FROM [TableX]--Delimiter is optional.WHERE [KeyCol] = 124 --Delimiter is optional.

在 Transact-SQL 語句中,對不符合所有標識符規則的標識符必須進行分隔。

SELECT *FROM [My Table] --Identifier contains a space and uses a reserved keyword.WHERE [order] = 10 --Identifier is a reserved keyword.

常規標識符和分隔標識符包含的字符數必須在 1 到 128 之間。對于本地臨時表,標識符最多可以有 116 個字符。

兩者重要的區別:常規標識符必須嚴格遵守命名的規定,而分隔標識符則可以不遵守命名規定,只要用[],""分隔出來就可以。

標識符格式:
  
  1、標識符必須是統一碼(Unicode)2.0標準中規定的字符,以及其他一些語言字符。如漢字.
  
  2、標識符后的字符可以是(除條件一)“_”、“@”、“#”、“$”及數字。
  
  3、標識符不允許是Transact-SQL的保留字。
  
  4、標識符內不允許有空格和特殊字符。
  
  另外,某些以特殊符號開頭的標識符在SQL SERVER 中具有特定的含義。

以“@”開頭的標識符表示這是一個局部變量或是一個函數的參數;以#開頭的標識符表示這是一個臨時表或是一存儲過程。

以“##”開頭的表示這是一個全局的臨時數據庫對象。T

ransact-SQL的全局變量以“@@”開頭。

標識符最多可以容納128個字符。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲激情视频网| 国产ts人妖一区二区三区| 亚洲欧美日韩在线高清直播| 色琪琪综合男人的天堂aⅴ视频| 亚洲成人a级网| 欧美激情一级欧美精品| 91大神福利视频在线| 成人国产精品久久久久久亚洲| 亚洲а∨天堂久久精品9966| 日韩av中文字幕在线| 亚州国产精品久久久| 亚洲福利视频专区| 欧洲永久精品大片ww免费漫画| 日韩欧美在线视频| 欧美一级黑人aaaaaaa做受| 91精品美女在线| 国产成人福利夜色影视| 亚洲人成在线观| 国产午夜精品视频免费不卡69堂| 3344国产精品免费看| 国产精品亚洲аv天堂网| 精品少妇v888av| 欧美成人午夜免费视在线看片| 日韩av一区二区在线观看| 日韩有码片在线观看| 一本色道久久综合亚洲精品小说| 日韩hd视频在线观看| 日韩中文字幕在线播放| 自拍视频国产精品| 九九精品在线观看| 国产精品爱啪在线线免费观看| 精品国产一区二区三区久久久| 国产亚洲欧美另类中文| 久久精品国产视频| 亚洲理论电影网| 国产精品视频一区二区高潮| 精品国产欧美一区二区五十路| 青青草成人在线| 国产欧美中文字幕| 中文字幕亚洲一区二区三区| 久久韩剧网电视剧| 日韩精品在线观| 国产日韩在线观看av| 热re99久久精品国产66热| 国产欧美最新羞羞视频在线观看| 九九热精品视频| 日韩av在线免费观看| 欧美老少配视频| 国产精品入口免费视频一| 国产精品视频一区二区高潮| 国产精品中文字幕在线观看| 日韩欧美一区二区三区| 精品精品国产国产自在线| 亚洲成人av中文字幕| 91久久在线播放| 亚洲国产黄色片| 黄色精品一区二区| 亚洲欧美日韩区| 精品自在线视频| 久久久久久九九九| 91精品视频播放| 欧美激情a∨在线视频播放| 久久999免费视频| 中文字幕欧美日韩| 国产精品久久久久久久久久尿| 久久中国妇女中文字幕| 欧美国产日韩一区二区在线观看| 亚洲精品美女久久| 欧美黑人一级爽快片淫片高清| 国产黑人绿帽在线第一区| 日本精品久久久久影院| 日韩电影大全免费观看2023年上| 成人美女av在线直播| 98午夜经典影视| 欧美激情精品久久久久久久变态| 日韩专区中文字幕| 亚洲第一视频网| 91精品中文在线| 亚洲欧美日韩精品久久奇米色影视| 日本久久久久久久久久久| 成人久久久久爱| 久久影院在线观看| 日韩在线观看你懂的| 亚洲视频一区二区三区| 久久免费视频这里只有精品| 亚洲视频网站在线观看| 精品人伦一区二区三区蜜桃免费| 在线中文字幕日韩| 国产精品美女免费| 精品少妇一区二区30p| 韩剧1988免费观看全集| 国产欧美一区二区白浆黑人| 国产精品视频大全| xxav国产精品美女主播| 成人网在线观看| 国产99视频精品免视看7| 精品一区二区三区四区在线| 日韩美女在线观看| 欧美视频专区一二在线观看| 91精品在线观看视频| 亚洲精品动漫久久久久| 久久久久久久电影一区| 9.1国产丝袜在线观看| 91麻豆桃色免费看| 亚洲视频免费一区| 亚洲大胆人体av| 久久精品国产久精国产一老狼| 欧美在线日韩在线| 亚洲丝袜一区在线| 久久久国产成人精品| 欧美激情亚洲另类| 2019中文字幕在线| 国产女人精品视频| 亚洲精品98久久久久久中文字幕| 亚洲天堂男人天堂女人天堂| 国模吧一区二区三区| 国产精品福利在线观看| 精品视频偷偷看在线观看| 91精品国产91久久| 国产精品久久久久久久久免费| 久久国产精品久久久久久| 97精品国产91久久久久久| 成人性生交大片免费看小说| 亚洲天堂av在线免费观看| 精品成人乱色一区二区| 欧美成人国产va精品日本一级| 亚洲午夜未删减在线观看| 国产精品成人观看视频国产奇米| 亚洲国产欧美日韩精品| 久久久久久久久国产| 久久影院模特热| 热99精品只有里视频精品| 久久国产精品免费视频| 亚洲国产精品人人爽夜夜爽| 亚洲视频在线播放| 色吧影院999| 日韩免费电影在线观看| 韩日欧美一区二区| 精品国产乱码久久久久酒店| 国产热re99久久6国产精品| 亚洲综合日韩中文字幕v在线| 91久久久久久国产精品| 日韩小视频网址| www.99久久热国产日韩欧美.com| 日韩av在线网址| 欧美专区中文字幕| 性欧美长视频免费观看不卡| 国产精品永久免费在线| 精品国产91久久久久久| 精品亚洲aⅴ在线观看| 中文字幕精品www乱入免费视频| xxxxx91麻豆| 国产男女猛烈无遮挡91| 国产国语videosex另类| 久久久精品一区| 97久久伊人激情网| **欧美日韩vr在线| 日韩成人中文电影| 亚洲最大福利视频网站| 日韩在线观看网址| 91国产美女在线观看| 国产精品日韩在线一区| 亚洲国产天堂久久综合网| 欧美在线免费看|