特殊的數據類型: bit、sql_variant、sysname

来源:http://www.cnblogs.com/ljhdo/archive/2016/10/16/5144774.html
-Advertisement-
Play Games

在SQL Server中,特殊的數據類型主要有三個,分別是:bit、sql_variant 和 sysname 一,bit bit類型,只有三個有效值:0,1 和 null,字元串true或false能夠隱式轉換為bit類型,true轉換為1,false轉換為0;任何非0的整數值轉換成bit類型時, ...


在SQL Server中,特殊的數據類型主要有三個,分別是:bit、sql_variant 和 sysname

一,bit

bit類型,只有三個有效值:0,1 和 null,字元串true或false能夠隱式轉換為bit類型,true轉換為1,false轉換為0;任何非0的整數值轉換成bit類型時,值都是1。

1,將字元串 true 和 false 隱式轉換成 bit 類型

declare @bit_true bit
declare @bit_false bit
set @bit_true='true'
set @bit_false='false'
select @bit_true,@bit_false

2,存儲空間

bit類型存儲 0 和 1 ,只需要使用 1 bit 就能表示,但是,在存儲到Disk時,SQL Server按照Byte來分配存儲空間。如果表中只有1個 bit 列,那麼該列將會占用1Byte的空間,一個Byte最多存儲8個bit列。

The SQL Server Database Engine optimizes storage of bit columns. If there are 8 or less bit columns in a table, the columns are stored as 1 byte. If there are from 9 up to 16 bit columns, the columns are stored as 2 bytes, and so on.

二,sql_variant

1,存儲空間

sql_variant 是變長的數據類型,包含兩部分信息:基礎類型和Value,最多存儲8000Byte的數據。

sql_variant includes both the base type information and the base type value. The maximum length of the actual base type value is 8,000 bytes.

declare @sv sql_variant
set @sv=REPLICATE('abcd',2001)
--max bytes:8000
select len(cast(@sv as varchar(max)))

2,賦值和運算

在賦值時,SQL Server 自動將其他數據類型隱式轉換為sql_variant類型,但是,SQL Server不支持將sql_variant類型隱式轉換成其他數據類型,必須顯式轉換。不能直接對sql_variant進行運算,例如,在對sql_variant 類型進行算術/字元操作時,必須顯式將其轉換成基礎數據類型,然後才能對其進行運算。

When handling the sql_variant data type, SQL Server supports implicit conversions of objects with other data types to the sql_variant type. However, SQL Server does not support implicit conversions from sql_variant data to an object with another data type.

declare @var_int sql_variant
declare @var_bit sql_variant

set @var_bit='true'
set @var_int=10

select @var_bit,@var_int,cast(@var_bit as bit),cast(@var_int as int)

三,sysname

sysname 是一個系統數據類型,用於定義表列、變數以及存儲過程的參數,是nvarchar(128) 的同義詞,當該類型用於定義table column時,SQL Server 會自動添加 not null ,等價於nvarchar(128) not null。

查看sysname的定義

exec sp_help  sysname 

  • 使用sysname定義變數或參數時,等價於 nvarchar(128)
  • 使用sysname定義column的類型時,等價於 nvarchar(128) not null

當使用sysname定義column的類型時,SQL Server 自動在sysname 後面加上not null,即 sysname not null,等價於 nvarchar(128) not null

create table dbo.dt
( 
  col sysname
)
--系統生成的create table 腳本 CREATE TABLE [dbo].[dt] ( [col] [sysname] NOT NULL )

 

參考文檔:

sql_variant (Transact-SQL)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先吹一下意圖:切割字元串是因為在資料庫中存圖片地址時,可能一件商品對應有多張圖片。那麼我們可以建一個商品表(goods)和一個圖片表(goods_image),然後讓圖片表的id作為商品表的外鍵,實現一對多的關聯。 但是想到建表一個路徑一個路徑的存,數據也蠻多的,然後既然可以在商品表中添加一個欄位 ...
  • 控制台列印的信息如下 解決辦法: Xcode8裡邊 Edit Scheme... -> Run -> Arguments, 在Environment Variables裡邊添加 OS_ACTIVITY_MODE = disable 步驟1. 步驟2. 步驟3. 結束設置 ...
  • 調整圖片大小的時候按下:option鍵讓讓控制項跟內容一樣大:command+= http://www.cr173.com/html/21801_1.html 一、關於運行調試1、運行,停止,都在工具欄的Product里。Command + R 運行。Command + . 停止 2、F6單步調試、F ...
  • Rocksdb是一個kv引擎,由facebook團隊基於levelDB改進而來,Rocksdb採用LSM-tree存儲數據,良好的讀寫特性以及壓縮特性使得其非常受歡迎。此外,Rocksdb引擎作為插件已經集成在facebook維護的MySQL分支,用戶可以通過SQL來訪問rocksDB。本文主要通過 ...
  • PL/SQL PL/SQL 簡介 每一種資料庫都有這樣的一種語言,PL/SQL 是在Oracle裡面的一種編程語言,在Oracle內部使用的編程語言。我們知道SQL語言是沒有分支和迴圈的,而PL語言是為了補充SQL語言的,是帶有了分支和迴圈的語言。 PL/SQL 語法 基本數據類型聲明 declar... ...
  • 目錄 環境準備 創建hadoop用戶 更新apt 配置SSH免密登陸 安裝配置Java環境 安裝Hadoop Hadoop單機/偽分佈配置 單機Hadoop 偽分佈Hadoop 啟動Hadoop 停止Hadoop 目錄 作者: vincent_zh時間:2016-10-16 出處:http://ww ...
  • 一、前言 現在做項目數據訪問基本都會選擇一種orm框架,它以面向對象的形式屏蔽底層的數據訪問形式,讓開發人員更集中在業務處理上,而不是和資料庫的交互上,幫助我們提高開發效率;例如一些簡單的insert、update,我們不需要寫insert into...sql 語句,而是直接new一個實體對象,然 ...
  • 介紹 為了避免在資料庫表結構設計過程中使用系統保留關鍵字我們必須知道資料庫存在哪些關鍵字,接下來會列出mysql、oracle、sqlserver三個資料庫各自的保留關鍵字。 Mysql http://dev.mysql.com/doc/refman/5.7/en/keywords.html ACC ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...