婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > sql cast,convert,QUOTENAME,exec 函數(shù)學(xué)習(xí)記錄

sql cast,convert,QUOTENAME,exec 函數(shù)學(xué)習(xí)記錄

熱門標(biāo)簽:貴州房產(chǎn)智能外呼系統(tǒng)供應(yīng)商 小e電話機(jī)器人 臨沂智能電銷機(jī)器人加盟哪家好 電銷外呼有錄音系統(tǒng)有哪些 百度地圖標(biāo)注改顏色 外呼運(yùn)營(yíng)商線路收費(fèi) 鎮(zhèn)江網(wǎng)路外呼系統(tǒng)供應(yīng)商 申請(qǐng)400電話在哪辦理流程 一個(gè)導(dǎo)航軟件能用幾個(gè)地圖標(biāo)注點(diǎn)

語(yǔ)法
使用 CAST:

CAST ( expression AS data_type )

使用 CONVERT:

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

參數(shù)
expression

是任何有效的 Microsoft SQL Server" 表達(dá)式。有關(guān)更多信息,請(qǐng)參見(jiàn)表達(dá)式。

data_type

目標(biāo)系統(tǒng)所提供的數(shù)據(jù)類型,包括 bigint 和 sql_variant。不能使用用戶定義的數(shù)據(jù)類型。有關(guān)可用的數(shù)據(jù)類型的更多信息,請(qǐng)參見(jiàn)數(shù)據(jù)類型。

length

nchar、nvarchar、char、varchar、binary 或 varbinary 數(shù)據(jù)類型的可選參數(shù)。

style

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



將某種數(shù)據(jù)類型的表達(dá)式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類型。有關(guān)可用的數(shù)據(jù)類型的更多信息,請(qǐng)參見(jiàn)數(shù)據(jù)類型。日期格式樣式,借以將 datetime 或 smalldatetime 數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型);或者字符串格式樣式,借以將 float、real、money 或 smallmoney 數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)(nchar、nvarchar、char、varchar、nchar 或 nvarchar 數(shù)據(jù)類型)。當(dāng)轉(zhuǎn)換為字符數(shù)據(jù)時(shí)輸出。
 

隱性轉(zhuǎn)換對(duì)于用戶是不可見(jiàn)的。
SQL Server 自動(dòng)將數(shù)據(jù)從一種數(shù)據(jù)類型轉(zhuǎn)換成另一種數(shù)據(jù)類型。例如,如果一個(gè) smallint 變量和一個(gè) int 變量相比較,這個(gè) smallint 變量在比較前即被隱性轉(zhuǎn)換成 int 變量。

顯式轉(zhuǎn)換使用 CAST 或 CONVERT 函數(shù)。
CAST 和 CONVERT 函數(shù)將數(shù)值從一個(gè)數(shù)據(jù)類型(局部變量、列或其它表達(dá)式)轉(zhuǎn)換到另一個(gè)數(shù)據(jù)類型。

例如,下面的 CAST 函數(shù)將數(shù)值 $157.27 轉(zhuǎn)換成字符串 ''$157.27'':CAST ( $157.27 AS VARCHAR(10) )
CAST 函數(shù)基于 SQL-92 標(biāo)準(zhǔn)并且優(yōu)先于 CONVERT。

當(dāng)從一個(gè) SQL Server 對(duì)象的數(shù)據(jù)類型向另一個(gè)轉(zhuǎn)換時(shí),一些隱性和顯式數(shù)據(jù)類型轉(zhuǎn)換是不支持的。例如,nchar 數(shù)值根本就不能被轉(zhuǎn)換成 image 數(shù)值。nchar 只能顯式地轉(zhuǎn)換成 binary,隱性地轉(zhuǎn)換到 binary 是不支持的。nchar 可以顯式地或者隱性地轉(zhuǎn)換成 nvarchar。

當(dāng)處理 sql_variant 數(shù)據(jù)類型時(shí),SQL Server 支持將具有其它數(shù)據(jù)類型的對(duì)象隱性轉(zhuǎn)換成 sql_variant 類型。然而,SQL Server 并不支持從 sql_variant 數(shù)據(jù)隱性地轉(zhuǎn)換到其它數(shù)據(jù)類型的對(duì)象。

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

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

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

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

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

函數(shù)QUOTENAME
--
功能:返回帶有分隔符的Unicode 字符串,分隔符的加入可使輸入的字符串成為有效的Microsoft SQL Server 2005 分隔標(biāo)識(shí)符。
--
語(yǔ)法
QUOTENAME ( 'character_string' [ , 'quote_character' ] ) 

--舉例說(shuō)明:

--比如你有一個(gè)表,名字叫index
--
你有一個(gè)動(dòng)態(tài)查詢,參數(shù)是表名
declare @tbname varchar(256)
set @tbname='index'
---查這個(gè)表里的數(shù)據(jù):
print('select * from '+@tbname)
exec('select * from '+@tbname)

--這樣print出來(lái)的數(shù)據(jù)是
select * from index

--因?yàn)閕ndex是字鍵字,肯定出錯(cuò),加上括號(hào)就可以了:
select * from [index]

--這便有了QUOTENAME,即:
print('select * from '+QUOTENAME(@tbname))
--結(jié)果:select * from [index]
exec('select * from '+QUOTENAME(@tbname))

EXEC命令有兩個(gè)用法:執(zhí)行一個(gè)存儲(chǔ)過(guò)程,或者執(zhí)行一個(gè)動(dòng)態(tài)批次。批次是一個(gè)內(nèi)容為SQL語(yǔ)句的字符串。
    例如:
    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的括號(hào)里,只允許是字符串變量、字符串常量存在。不允許在這里調(diào)用函數(shù)或者使用case表達(dá)式。
    下面的代碼是錯(cuò)誤的:
        exec('select count(*) from '+quotename(@objName));

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

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

        變量與字符串連接會(huì)引發(fā)所謂的SQL注入安全隱患,如果變量包含了字符串。要防患SQL注入的一個(gè)辦法是限制
    字符串的大小。
        這種連接會(huì)對(duì)性能造成映像。SS會(huì)為每個(gè)字符串單獨(dú)創(chuàng)建一個(gè)執(zhí)行計(jì)劃,無(wú)論兩個(gè)字符串是否是一個(gè)模式。為此,
    下面顯示了一個(gè)例子:
        首先清除cache里的執(zhí)行計(jì)劃:
            DBCC freeproccache;
        然后執(zhí)行下面的代碼三次,分別將@i設(shè)置為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.%';
        結(jié)果顯示為:
            它會(huì)為每次查詢生成一個(gè)執(zhí)行計(jì)劃。以及一個(gè)參數(shù)化的執(zhí)行計(jì)劃。

    EXEC也沒(méi)有輸出參數(shù)。缺省情況下,exec將返回該次查詢的輸出給調(diào)用者。如果希望將該結(jié)果保存到變量里,那就必須
使用Insert EXEC語(yǔ)法,并從表里從新讀取該數(shù)據(jù),然后儲(chǔ)存到目標(biāo)變量里。
    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;

    注意如果忘記輸入最后的一條語(yǔ)句“Drop 。。。”,那么就會(huì)出現(xiàn)下面的令人討厭的錯(cuò)誤:
        數(shù)據(jù)庫(kù)中已存在名為 '#T' 的對(duì)象。

    在上面這段程序里,創(chuàng)建了一個(gè)臨時(shí)表,它對(duì)于動(dòng)態(tài)批次是可見(jiàn)的。所以可以修改上面的程序?yàn)椋?BR>        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;
    因?yàn)镋XEC的執(zhí)行是在Create Table之后,所以Insert語(yǔ)句可以移到@sql的定義里。

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

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

    3 EXEC AT  
        這是05里的新語(yǔ)法。執(zhí)行遠(yuǎn)程主機(jī)上的動(dòng)態(tài)SQL語(yǔ)句

加上 N 代表存入數(shù)據(jù)庫(kù)時(shí)以 Unicode 格式存儲(chǔ)。
N'string' 表示string是個(gè)Unicode字符串

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

Unicode 字符串常量支持增強(qiáng)的排序規(guī)則

數(shù)據(jù)庫(kù)名是一個(gè)標(biāo)識(shí)符,表名也是一個(gè)標(biāo)識(shí)符,在SQL SERVER中標(biāo)識(shí)符分為兩類:

標(biāo)識(shí)符有兩類:

常規(guī)標(biāo)識(shí)符

符合標(biāo)識(shí)符的格式規(guī)則。在 Transact-SQL 語(yǔ)句中使用常規(guī)標(biāo)識(shí)符時(shí)不用將其分隔。

SELECT *FROM TableXWHERE KeyCol = 124

分隔標(biāo)識(shí)符

包含在雙引號(hào) (") 或者方括號(hào) ([ ]) 內(nèi)。符合標(biāo)識(shí)符格式規(guī)則的標(biāo)識(shí)符可以分隔,也可以不分隔。

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

在 Transact-SQL 語(yǔ)句中,對(duì)不符合所有標(biāo)識(shí)符規(guī)則的標(biāo)識(shí)符必須進(jìn)行分隔。

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

常規(guī)標(biāo)識(shí)符和分隔標(biāo)識(shí)符包含的字符數(shù)必須在 1 到 128 之間。對(duì)于本地臨時(shí)表,標(biāo)識(shí)符最多可以有 116 個(gè)字符。

兩者重要的區(qū)別:常規(guī)標(biāo)識(shí)符必須嚴(yán)格遵守命名的規(guī)定,而分隔標(biāo)識(shí)符則可以不遵守命名規(guī)定,只要用[],""分隔出來(lái)就可以。

標(biāo)識(shí)符格式:
  
  1、標(biāo)識(shí)符必須是統(tǒng)一碼(Unicode)2.0標(biāo)準(zhǔn)中規(guī)定的字符,以及其他一些語(yǔ)言字符。如漢字.
  
  2、標(biāo)識(shí)符后的字符可以是(除條件一)“_”、“@”、“#”、“$”及數(shù)字。
  
  3、標(biāo)識(shí)符不允許是Transact-SQL的保留字。
  
  4、標(biāo)識(shí)符內(nèi)不允許有空格和特殊字符。
  
  另外,某些以特殊符號(hào)開(kāi)頭的標(biāo)識(shí)符在SQL SERVER 中具有特定的含義。

以“@”開(kāi)頭的標(biāo)識(shí)符表示這是一個(gè)局部變量或是一個(gè)函數(shù)的參數(shù);以#開(kāi)頭的標(biāo)識(shí)符表示這是一個(gè)臨時(shí)表或是一存儲(chǔ)過(guò)程。

以“##”開(kāi)頭的表示這是一個(gè)全局的臨時(shí)數(shù)據(jù)庫(kù)對(duì)象。T

ransact-SQL的全局變量以“@@”開(kāi)頭。

標(biāo)識(shí)符最多可以容納128個(gè)字符。

您可能感興趣的文章:
  • SqlServer中用exec處理sql字符串中含有變量的小例子
  • 解決PHP mysql_query執(zhí)行超時(shí)(Fatal error: Maximum execution time …)
  • Android之采用execSQL與rawQuery方法完成數(shù)據(jù)的添刪改查操作詳解
  • SQLServer:探討EXEC與sp_executesql的區(qū)別詳解
  • 安裝sqlserver2000時(shí)出現(xiàn)wowexec.exe無(wú)反應(yīng)的解決方法
  • SQL 中sp_executesql存儲(chǔ)過(guò)程的使用幫助
  • sqlserver 錯(cuò)誤602,未能在sysindexes中找到數(shù)據(jù)庫(kù) 的解決辦法
  • 在Sql Server中調(diào)用外部EXE執(zhí)行程序引發(fā)的問(wèn)題

標(biāo)簽:澳門 晉城 嘉興 三明 日照 合肥 延邊 保定

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《sql cast,convert,QUOTENAME,exec 函數(shù)學(xué)習(xí)記錄》,本文關(guān)鍵詞  sql,cast,convert,QUOTENAME,exec,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《sql cast,convert,QUOTENAME,exec 函數(shù)學(xué)習(xí)記錄》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于sql cast,convert,QUOTENAME,exec 函數(shù)學(xué)習(xí)記錄的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 海伦市| 民权县| 鹿泉市| 大英县| 德庆县| 奈曼旗| 丰顺县| 高雄县| 繁峙县| 黎平县| 聂荣县| 安陆市| 延安市| 晋江市| 呼和浩特市| 大埔县| 南涧| 阿拉善右旗| 余干县| 柘荣县| 合川市| 铁岭市| 湖口县| 长兴县| 东平县| 布尔津县| 泸定县| 绥阳县| 大竹县| 简阳市| 达孜县| 黄大仙区| 尚义县| 和硕县| 互助| 射洪县| 水富县| 天津市| 周口市| 琼海市| 砚山县|