顯示具有 MS-SQL 標籤的文章。 顯示所有文章
顯示具有 MS-SQL 標籤的文章。 顯示所有文章

2020年10月15日 星期四

[Net Core]Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware IIS APPPOOL 登入失敗 SqlException

方案一: 

Exception: 

Microsoft.Data.SqlClient.SqlException (0x80131904): 使用者 'IIS APPPOOL\ApiWeb' 的登入失敗


在 sql server 新增一個使用者:

NT AUTHORITY\SERVICE


所以在 iis 上就不用改「識別」依舊使用:ApplicationPoolIdentity

卻保 iis 安全


方案二:

請查一下。你的ConnectionString 裡面

指定 Trusted_Connection=Yes 以與 Windows 整合式驗證連線

改成 false

透過 帳號密碼登入


2016年1月13日 星期三

【T-SQL】 APPLY CROSS APPLY 與 OUTER APPLY 使用

資料庫相容性層級至少必須是 90

相關範本1:https://technet.microsoft.com/zh-tw/library/ms175156(v=sql.105).aspx
說明:

相關範本2:https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
說明:有各用的APPLY 用法

CROSS APPLY
說明:交叉比對 Inner Join ,兩邊有符合資料才會出現

OUTER APPLY
說明:像 Left join 方法,左邊為主,右邊為輔,若右邊沒有ID 符合左邊ID,就會出現NULL


使用說明:
1.APPLY 使用,回傳 table , 但多筆row的話 ,會造資料變成 Cross Join 方法,N x N 資料表
除非有加上 Where 條件

2.OUTER APPLY 使用,若回傳 table 單筆 row 的話,就會像Left Join

3.Corss APPLY 使用,若回傳 table 單筆 row 的話,就會像Inner Join

4.APPLY 使用方法有兩種
第一種:
---------------------------------
SELECT * FROM A
Outer Apply
(
 SELECT * From B
 Where B.id = A.id
)Temp
---------------------------------

第二種
SELECT * FROM A
Outer Apply FunctionName(A.id) Temp

---------------------------------







2014年10月9日 星期四

【MS SQL 資料庫 trigger 】 查詢 觸發事件 資料


 SCHEMA_NAME(tb.schema_id) N'結構描述', OBJECT_NAME(t.parent_id) N'資料表', t.name N'觸發程序名稱', parent_class_desc N'觸發程序父類別的描述',
 t.type_desc N'物件類型的描述',  tEV.type_desc '引發觸發程序的每個事件', is_instead_of_trigger N'是否為 INSTEAD OF 觸發程序'
FROM sys.triggers t INNER JOIN sys.trigger_events tEV ON t.object_id = tEV.object_id
 INNER JOIN sys.tables tb ON t.parent_id = tb.object_id

德瑞克
轉載:http://sharedderrick.blogspot.tw/2013/08/dml-trigger.html

2013年11月27日 星期三

【MS-SQL】 某欄位有 值 有 , 逗號,如何切成兩個欄位,若沒有逗號又該怎麼處理 charindex

DECLARE @A varchar(17)
SET @A = '12341234,9999'
DECLARE @B varchar(17)

--有兩個逗號,一個取前,一個取後面

--取前面
SELECT substring(@A,1,charindex(',',@A)-1)

--取後面
SELECT substring(@A,charindex(',',@A)+1,charindex(',',@A)-1)

因為 該欄位沒有逗號會出現SQL語法錯誤,又應該怎麼處理

用CASE  利用 charindex 先抓 逗號在地幾個位置,位置大於 0
代表有逗號,若沒有逗號,就直接呈現資料

SELECT
CASE WHEN charindex(',',@A) >0
THEN substring(@A,1,charindex(',',@A)-1)
ELSE @A END AS before
,
CASE WHEN charindex(',',@A) >0
THEN substring(@A,charindex(',',@A)+1,LEN(@A))
ELSE @A END AS after


點圖片可以放大

2013年6月14日 星期五

【MS-SQL】 判斷 日期 為 哪一個季節 轉換出: 輸出數字 1-4

判斷  日期 為 哪一季節

Select TOP 100 DATEPART(quarter, GETDATE()) as season from XXXX

說明:GETDATE() 換成你要的時間欄位 即可

轉換出: INT 數字  1~ 4

DATEPART 底下的 quarter 為主要涵數

2012年3月27日 星期二

【SQL】無法變更長度欄位名稱訊息 處理

如果說:sql 沒辦法更改、變更、長度 
請先到以下先設定


工具-選項- 設計師-資料表和資料庫設計工具-取消勾選
防止儲存需要資料表重建的變更

2011年12月12日 星期一

SQL 語法雜碎 - 字串處理


SQL 常用字串處理語法說明:包含 substring、left、right、upper、lower、ltrim、rtrim、、、
  • 取字串中部分字元
    • SELECT Mem_ID, substring(Mem_ID,4,6) AS MEM_ID_6 FROM members
    • 語法:substring(欄位, 起始字元, 取幾字元)
    • ex: A123456789  => substring(Id,4,6) => 456789
    • 取左側字元
    • SELECT LEFT(engname,5) FROM members
    • 語法:left(欄位, 位數)
    • ex: SELECT LEFT('abcdefghijk',5) => abcde
    • 取右側字元
    • SELECT RIGHT(engname,5) FROM members
    • 語法:right(欄位, 位數)
    • ex: SELECT RIGHT('abcdefghijk',5) => ghijk
  • 字串大小寫轉換 upper、lower
    • SELECT upper(engname) FROM members
    • 語法:upper(欄位)
    • ex: michael => upper => MICHAEL
    • SELECT lower(engname) FROM members
    • 語法:lower(欄位)
    • ex: MICHAEL => lower => michael
  • 去除無謂空白 ltrim、rtrim
    • SELECT LTRIM(email) FROM members
    • 語法:ltrim(欄位)
    • ex: "    abd@com" => ltrim => "abd@com"
    • SELECT RTRIM(memo) FROM members
    • 語法:rtrim(欄位)
    • ex:"Have a nice day.     " => rtrim =>"Have a nice day."

2011年11月7日 星期一

MS SQL 200 資料型態

資料型態:

資料型態說明範例
INT長度為 4 個 bytes;介於 -2,147,483,648 與 2,147,483,647 間的整數 
SMALLINT長度為 2 個 bytes;介於 -32,768 與 32,767 間的整數 
TINYINT長度為 1 個 bytes;介於 0 與 255 間的整數 
BIGINT長度為 8 個 bytes;介於 -2^63 與 2^63-1 間的整數 
FLOAT[(n)]n 是儲存 float 數字的小數位數,介於 1 與 53 間; 若 n 介於 1 與 24 間,儲存大小為 4 個 bytes,有效位數為 7 位數;若 n 介於 25 與 53 間,儲存大小為 8 個 bytes,有效位數為 15 位數
create table p_ex (num1 real, num2 float)
insert into p_ex values(4000000.123456789, 
                  4000000.123456789012345)
insert into p_ex values(400.123456789, 
                  400.1234567890123456789)
select * from p_ex
// real 共顯示八位數,float 共顯示 17 位數
REAL長度為 4 個 bytes;介於 -3.4E-38 與 3.4E+38 間的浮點數;與 FLOAT(24) 相同 
DECIMAL[(p[,s])]使用 2 到 17 個 bytes 來儲存資料,可儲存的值介於 -1038-1 與 1038-1 之間;p 用來定義小數點兩邊可以被儲存的位數總數目,而 s 代表小數點右邊的有效位數(s < p);p的預設值為 18 而 s 的預設值為0
create table p_ex (num1 numeric(19,9), 
                   num2 decimal)
insert into p_ex values(4000000.123456789, 
                  4000000.123456789012345)
select * from p_ex
NUMERIC[(p[,s])]與 DECIMAL[(p[,s])] 同 
CHAR[(n)]固定長度為 n 的字元型態,n 必須介於 1 與 8000 之間 
VARCHAR[(n)]與 CHAR 相同,只是若輸入的資料小於 n,資料庫不會自動補空格,因此為變動長度之字串 
NCHAR 與 NVARCHAR與 CHAR 以及 VARCHAR 相同,只是每一個 字元為兩個 bytes 的 unicode,且 n 最大為 4000 
DATETIME長度為 8 個 bytes;介於 1/1/1753 與 12/31/9999 間的日期時間 
SMALLDATETIME長度為 4 個 bytes;介於 1/1/1900 與 6/6/2079間的日期時間
create table d_ex (d1 datetime, 
                   d2 smalldatetime)
insert into d_ex values ('1/1/1753', 
                       'Jan 2 1900')
select * from d_ex
MONEY長度為 8 個 bytes 的整數,小數點的精確度取四位 
SMALLMONEY長度為 4 個 bytes 的整數,小數點的精確度取四位 
BIT只佔用一個位元,且不允許存放 NULL 值 
BINARY[(n)]固定長度為 n+4 個 bytes; n 為 1 到 8000 的值,輸入的 值必需符合兩個條件: (1) 每一個值皆為 0-9、a-f 的值;(2)每一個值的前面必須有 0X
create table b_ex (x binary(1), y binary(2))
insert into b_ex values(0x0, 0x0)
insert into b_ex values(0x1, 0x1)
insert into b_ex values(0xff, 0xff)
insert into b_ex values(0xfff, 0xfff)
insert into b_ex values(0xff, 0xfff)
insert into b_ex values(0xffff, 0xffff)
insert into b_ex values(0xff, 0xffff)
select * from b_ex
VARBINARY[(n)]與 BINARY 相同,只是若輸入的資料小於 n,資料庫 不會自動補 0,因此長度為變動的 
TEXT用來儲存大量的(可高達兩億個位元組)字元資料,儲存空間 以 8k 為單位動態增加 
NTEXT和 TEXT 雷同,只是儲存的是 Unicode 資料 
IMAGE和 TEXT 雷同,只是儲存的是影像資料 
SQL_VARIANT此資料型別可儲存 text、ntext、timestamp 與 sql_variant以外的各種 SQL Server 支援的資料型別。a sql_variant column can contain smallint values for some rows, float values for other rows, and char/nchar values in the remainder.
create table  b_ex (x int, y sql_variant)
insert into b_ex values(5, '五十')
insert into b_ex values(6, 60)
select * from b_ex

MSSQL 簡體字存入亂碼解決方式

資料庫型態須定義為 ntext 或是 nchar , nvarchar

若定義成一般習慣前面未加 'n' 將只能放本國語系的文字

如果簡體字存入就會變成 '?'

而當 Insert 或是 UPDATE 資料時直接將簡體資料寫入也會變成 '?'

寫法必須改為 INSERT INTO table_name(test) VALUES(N'测试')

在寫入的資料前要加 N 他在存入資料庫時才會去呼掉到擴充字集..

如未加 N 他則是使用 big-5 字集...如果使用 .Net 裡面的 DataApdater 來

Update 資料也要注意 Parameters 裡面的關於每個參數的型態設定..