當前位置:首頁 » 編程語言 » sqlserver常量
擴展閱讀
尤浩然宋丹丹超級訪問 2022-08-09 06:43:13
從事前端開發方面怎麼學 2022-08-09 06:42:57
缺失表達式sql 2022-08-09 06:41:34

sqlserver常量

發布時間: 2022-06-24 16:59:34

『壹』 sqlServer中decimal,float 和 real 數據類型的區別

decimal 數據類型最多可存儲 38 個數字,所有數字都能夠放到小數點的右邊。decimal 數據類型存儲了一個准確(精確)的數字表達法;不存儲值的近似值。

定義 decimal 的列、變數和參數的兩種特性如下:

• p 小數點左邊和右邊數字之和,不包括小數點。如 123.45,則 p=5,s=2。

指定精度或對象能夠控制的數字個數。

• s

指定可放到小數點右邊的小數位數或數字個數。

p 和 s 必須遵守以下規則:0 <= s <= p <= 38。

numeric 和 decimal 數據類型的默認最大精度值是 38。在 Transact-SQL 中,numeric 與 decimal 數據類型在功能上等效。

當數據值一定要按照指定精確存儲時,可以用帶有小數的 decimal 數據類型來存儲數字。

float 和 real 數據

float 和 real 數據類型被稱為近似的數據類型。在近似數字數據類型方面,float 和 real 數據的使用遵循 IEEE 754 標准。

近似數字數據類型並不存儲為多數數字指定的精確值,它們只儲存這些值的最近似值。在很多應用程序中,指定值與存儲值之間的微小差異並不明顯。但有時這些差異也值得引起注意。由於 float 和 real 數據類型的這種近似性,當要求精確的數字狀態時,比如在財務應用程序中,在那些需要舍入的操作中,或在等值核對的操作中,就不使用這些數據類型。這時就要用 integer、decimal、money 或 smallmone 數據類型。

在 WHERE 子句搜索條件中(特別是 = 和 <> 運算符),應避免使用 float 或 real 列。最好限制使用 float 和 real 列做 > 或 < 的比較。

IEEE 754 規格提供了四種舍入模式:舍入到最接近的值、上舍入、下舍入和舍入到零。Microsoft® SQL Server™ 使用上舍入。所有的數值必須精確到確定的精度,但會產生細小的浮點值變化。因為浮點數字的二進製表示法可以採用很多合法舍入規則中的任意一條,因此我們不可能可靠地量化一個浮點值。

轉換 decimal 和 numeric 數據

對於 decimal 和 numeric 數據類型,Microsoft® SQL Server™ 將精度和小數位數的每個特定組合看作是不同的數據類型。例如,decimal(5,5) 和 decimal(5,0) 被當作不同的數據類型。(因此在編存儲過程當中使用的變數採用Real 或 Float,而不採用decimal類型)

在 Transact-SQL 語句中,帶有小數點的常量自動轉換為 numeric 數據值,且必然使用最小的精度和小數位數。例如,常量 12.345 被轉換為 numeric 值,其精度為 5,小數位為 3。

從 decimal 或 numeric 向 float 或 real 轉換會導致精度損失。從 int、smallint、tinyint、float、real、money 或 smallmoney 向 decimal 或 numeric 轉換會導致溢出。

默認情況下,在將數字轉換為較低精度和小數位數的 decimal 或 numeric 值時,SQL Server 使用舍入法。然而,如果 SET ARITHABORT 選項為 ON,當發生溢出時,SQL Server 會出現錯誤。若僅損失精度和小數位數,則不會產生錯誤。

Float 的科學計數法與值的問題,問題的根源在於 float 類型本身是一種不精確的數據表示方法, 也就是說, 你放一個數據進去, 拿出來的時候可能會存在一點點點誤差, 而這點點點誤差在做數據比較的時候就會導致數據不一致.

『貳』 sqlserver可以設置常量嗎

建一個只有一條記錄的表

『叄』 java中靜態常量與一般的常量哪個效率更高點

這三個變數的效率區別不是很大,如果非要說一個更有效率的話,那麼是第一個。靜態變數共享內存,所有的對象實例都訪問內存中的一個地址,不會重復生成和初始化。其他兩個關鍵是final了,這個的作用,就是不允許改變常量的值。其實這個問題無所謂的,現在硬體發達,本人覺得不需要在這些地方牽扯過多的精力,把精力放到業務邏輯中,對於大量的循環或者列表進行處理和優化,特別是經常需要調用的方法進行優化,才是王道。希望對你有所幫助吧。

『肆』 sqlserver怎麼定義全局的常量

常量,也稱為字面值或標量值,是表示一個特定數據值的符號。常量的格式取決於它所表示的值的數據類型。
比如:
declare @str varhcar(200)='1234567'

『伍』 如何在sqlserver 的函數或存儲過程中拋出異常

aiserror 的作用: raiserror 是用於拋出一個錯誤。[ 以下資料來源於sql server 2005的幫助 ]

其語法如下:

RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
)
[ WITH option [ ,...n ] ]

簡要說明一下:

第一個參數:{ msg_id | msg_str | @local_variable }
msg_id:表示可以是一個sys.messages表中定義的消息代號;
使用 sp_addmessage 存儲在 sys.messages 目錄視圖中的用戶定義錯誤消息號。
用戶定義錯誤消息的錯誤號應當大於 50000。

msg_str:表示也可以是一個用戶定義消息,該錯誤消息最長可以有 2047 個字元;
(如果是常量,請使用N'xxxx',因為是nvarchar的)
當指定 msg_str 時,RAISERROR 將引發一個錯誤號為 5000 的錯誤消息。

@local_variable:表示也可以是按照 msg_str 方式的格式化字元串變數。

第二個參數:severity
用戶定義的與該消息關聯的嚴重級別。(這個很重要)
任何用戶都可以指定 0 到 18 之間的嚴重級別。
[0,10]的閉區間內,不會跳到catch;
如果是[11,19],則跳到catch;
如果[20,無窮),則直接終止資料庫連接;

第三個參數:state
如果在多個位置引發相同的用戶定義錯誤,
則針對每個位置使用唯一的狀態號有助於找到引發錯誤的代碼段。

介於 1 至 127 之間的任意整數。(state 默認值為1)
當state 值為 0 或大於 127 時會生成錯誤!

第四個參數:argument
用於代替 msg_str 或對應於 msg_id 的消息中的定義的變數的參數。

第五個參數:option
錯誤的自定義選項,可以是下表中的任一值:
LOG :在錯誤日誌和應用程序日誌中記錄錯誤;
NOWAIT:將消息立即發送給客戶端;
SETERROR:將 @@ERROR 值和 ERROR_NUMBER 值設置為 msg_id 或 50000;

[SQL]代碼示例

--示例1DECLARE @raiseErrorCode nvarchar(50)
SET @raiseErrorCode = CONVERT(nvarchar(50), YOUR UNIQUEIDENTIFIER KEY)
RAISERROR('%s INVALID ID. There is no record in table',16,1, @raiseErrorCode)

--示例2RAISERROR (
N'This is message %s %d.', -- Message text,
10, -- Severity,
1, -- State,
N'number', -- First argument.
5 -- Second argument.
);
-- The message text returned is: This is message number 5.
GO

--示例3RAISERROR (N'<<%*.*s>>', -- Message text.
10, -- Severity,
1, -- State,
7, -- First argument used for width.
3, -- Second argument used for precision.
N'abcde'); -- Third argument supplies the string.
-- The message text returned is: << abc>>.
GO

--示例4RAISERROR (N'<<%7.3s>>', -- Message text.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO

--示例5
--A. 從 CATCH 塊返回錯誤消息
以下代碼示例顯示如何在 TRY 塊中使用 RAISERROR 使執行跳至關聯的 CATCH 塊中。
它還顯示如何使用 RAISERROR 返回有關調用 CATCH 塊的錯誤的信息。

BEGIN TRY
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;

SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();

RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;

--示例6
--B. 在 sys.messages 中創建即席消息
以下示例顯示如何引發 sys.messages 目錄視圖中存儲的消息。
該消息通過 sp_addmessage 系統存儲過程,以消息號50005添加到 sys.messages 目錄視圖中。

sp_addmessage @msgnum = 50005,
@severity = 10,
@msgtext = N'<<%7.3s>>';
GO

RAISERROR (50005, -- Message id.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO

sp_dropmessage @msgnum = 50005;
GO

--示例7
--C. 使用局部變數提供消息文本
以下代碼示例顯示如何使用局部變數為 RAISERROR 語句提供消息文本。sp_addmessage @msgnum = 50005,
@severity = 10,
@msgtext = N'<<%7.3s>>';
GO

RAISERROR (50005, -- Message id.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: << abc>>.
GO

sp_dropmessage @msgnum = 50005;
GO

『陸』 sql server中,N''表示什麼意思

加上 N 代表存入資料庫時以 Unicode 格式存儲。

N'string' 表示string是個Unicode字元串

Unicode 字元串的格式與普通字元串相似,但它前面有一個 N 標識符(N 代表 SQL-92 標准中的國際語言 (National Language))。N 前綴必須是大寫字母。例如,'Michél' 是字元串常量而 N'Michél' 則是 Unicode 常量。Unicode 常量被解釋為 Unicode 數據,並且不使用代碼頁進行計算。Unicode 常量確實有排序規則,主要用於控制比較和區分大小寫。

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

(6)sqlserver常量擴展閱讀:

Unicode是國際組織制定的可以容納世界上所有文字和符號的字元編碼方案。目前的Unicode字元分為17組編排,0x0000 至 0x10FFFF,每組稱為平面(Plane),而每平面擁有65536個碼位,共1114112個。然而目前只用了少數平面。UTF-8、UTF-16、UTF-32都是將數字轉換到程序數據的編碼方案。

通用字元集(Universal Character Set, UCS)是由ISO制定的ISO 10646(或稱ISO/IEC 10646)標准所定義的標准字元集。UCS-2用兩個位元組編碼,UCS-4用4個位元組編碼。

歷史上存在兩個獨立的嘗試創立單一字元集的組織,即國際標准化組織(ISO)和多語言軟體製造商組成的統一碼聯盟。前者開發的 ISO/IEC 10646 項目,後者開發的統一碼項目。因此最初制定了不同的標准。

『柒』 sqlserver的數據字典是指什麼

數據字典用來表示某些數據或者說明某些數據的。資料庫中的字典表是針對整個資料庫庫而言的,表示資料庫表基本信息的,如SqlServer一些字典表。而對一個項目來說,一般都會定義一些常量存儲到一張單獨的表中,用來表示項目中一些常量信息!如項目中的一些下拉選項,這些都是常量,存儲到資料庫中,我們就認為這個表是字典表。簡單來說,資料庫的字典表就是描述資料庫表基本信息的表,我們不需要維護。項目中的字典表通常指那些不可變的可以窮舉出來的常量存儲的表。

『捌』 sqlserver 語法問題

若要使資料庫識別 Unicode,除了使用 nchar、nvarchar 和 ntext 數據類型定義 Unicode 存儲外,還可以定義識別 Unicode 的客戶端交互。可以通過在資料庫伺服器端執行下列操作來定義識別 Unicode 的客戶端交互:

在表列以及 CONVERT() 和 CAST() 操作中,將非 Unicode 數據類型轉換為 Unicode 數據類型。

使用 ASCII() 和 CHAR() 函數的 Unicode 等價函數 UNICODE() 和 NCHAR() 來替換它們。

以 Unicode 格式定義存儲過程和觸發器的變數和參數。

以字母 N 為前綴標識 Unicode 字元串常量。

在伺服器上執行的代碼中(例如在存儲過程和觸發器中)顯示的 Unicode 字元串常量必須以大寫字母 N 為前綴。即使所引用的列已定義為 Unicode 類型,也應如此。如果不使用 N 前綴,字元串將轉換為資料庫的默認代碼頁。這可能導致不識別某些字元。

例如,在前面示例中創建的存儲過程可以按以下方式在伺服器上執行:

復制代碼
EXECUTE Proct_Info @name = N'Chain'

使用 N 前綴的要求適用於伺服器上產生的字元串常量和從客戶端發送的字元串常量。

『玖』 sql server和mysql變數賦值的區別 以及 MySql Declare

oracle: 變數:= 變數[常量][表達式]...
mysql: set 變數 = 變數[常量][表達式]...
sqlserver: set 變數 = 變數[常量][表達式]...
區別就是oracle是賦值等於:=,其他的是等於=。