暫時先做個記錄,以後再將各個部分完善起來
目錄
3.第一條語句是等同於in的方法,主要是因爲在C#中用@countryCode傳輸值得時候,將'hk','pk'的數值當做了字符串來處理,
1.sqlserver中一種查父節點id的方法。
方法不難,其實就是 遞歸調出所有的父節點,但是把不懂這個原理怎麼實現的,看着臨時表mt可以用在union all 裏本身還是有點懵的,暫時先記錄一下這個方法
with mt as
(select t.ST_ID , t.ST_Name , t.ST_PID
from AWeb_SupplyType t where ST_ID =10051
union all
select t.ST_ID , t.ST_Name , t.ST_PID from AWeb_SupplyType t , mt
where t.ST_ID = mt.ST_PID )
select ST_ID , ST_Name , ST_PID from mt where ST_PID=0
2.sqlserver合併多條數據
FOR XML PATH 具體來講是將查詢結果集以XML形式
基本用法是輸出時行節點可由row變爲MyHobby ,列名由字段名變爲別名
SELECT CountryCode as 'Code', ContientType as 'Type' FROM PR_ServerCountry FOR XML PATH ('MyHobby')
將其用於表中,可將xml的格式轉換爲列表格式path(")就是講行節點row置爲''
select stuff((select ','+CountryCode from PR_ServerCountry for xml path('')),1,1,'') as name
3.第一條語句是等同於in的方法,主要是因爲在C#中用@countryCode傳輸值得時候,將'hk','pk'的數值當做了字符串來處理,
select * from PR_ServerCountry where charindex(rtrim(CountryCode), 'pk,hk')>0
select * from PR_ServerCountry where CountryCode in ('hk','pk')
4.排序中爲null的
此處的排序要記住是要進行兩次,第一次改變值,第二次纔是排序(?)
select UserID,UserNames
from UserInfo
order by case when Id is null then 1 else 0 end asc,Id asc
5.查詢數據庫中的所有索引
SELECT CASE
WHEN t.[type] = 'U' THEN
'表'
WHEN t.[type] = 'V' THEN
'視圖'
END AS '類型',
SCHEMA_NAME(t.schema_id) + '.' + t.[name] AS '(表/視圖)名稱',
i.[name] AS 索引名稱,
SUBSTRING(column_names, 1, LEN(column_names) - 1) AS '列名',
CASE
WHEN i.[type] = 1 THEN
'聚集索引'
WHEN i.[type] = 2 THEN
'非聚集索引'
WHEN i.[type] = 3 THEN
'XML索引'
WHEN i.[type] = 4 THEN
'空間索引'
WHEN i.[type] = 5 THEN
'聚簇列存儲索引'
WHEN i.[type] = 6 THEN
'非聚集列存儲索引'
WHEN i.[type] = 7 THEN
'非聚集哈希索引'
END AS '索引類型',
CASE
WHEN i.is_unique = 1 THEN
'唯一'
ELSE
'不唯一'
END AS '索引是否唯一'
FROM sys.objects t
INNER JOIN sys.indexes i
ON t.object_id = i.object_id
CROSS APPLY
(
SELECT col.[name] + ', '
FROM sys.index_columns ic
INNER JOIN sys.columns col
ON ic.object_id = col.object_id
AND ic.column_id = col.column_id
WHERE ic.object_id = t.object_id
AND ic.index_id = i.index_id
ORDER BY col.column_id
FOR XML PATH('')
) D(column_names)
WHERE t.is_ms_shipped <> 1
AND index_id > 0
ORDER BY i.[name];
6.創建遊標
整理下游標的知識,每次都要面向百度編程
-- 定義遊標 cur_income 爲遊標的名稱.
DECLARE cur_income CURSOR LOCAL FOR
SELECT PC_ID,PC_Name,PC_Code FROM AWeb_ProductClass;
--聲明遊標臨時變量
DECLARE
@id_income NVARCHAR(50),
@name_income NVARCHAR(50),
@code_income NVARCHAR(50);
OPEN cur_income --打開遊標
FETCH NEXT FROM cur_income INTO @id_income,@name_income,@code_income
--將遊標指向的數據賦值給聲明的變量 ,遊標指向結果中第一行
--判斷遊標的狀態
--0 fetch語句成功
--1 fetch語句失敗或此行不在結果集中
--2 被提取的行不存在
WHILE @@FETCH_STATUS = 0 --語句成功
BEGIN
// 業務場景
DECLARE @a int=0
DECLARE @b int=0;
if @code_income='a,'
begin
set @a=1;
set @b=2;
end
else begin
set @a=1;
set @b=2;
end
--插入到彙總表
INSERT INTO c(a,b,c,d,e)
VALUES (@id_income,@name_income,@Amount,@a,@b)
--執行下一行,直到完成結果集中所有行
FETCH NEXT FROM cur_income INTO @id_income,@name_income,@code_income
END
CLOSE cur_income--關閉遊標
DEALLOCATE cur_income-- 釋放遊標
7.查全部的存儲和視圖過程
select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b
where a.is_ms_shipped=0 and a.object_id = b.object_id and a.[type] in ('P','V','AF')
order by a.[name] asc
8.創建一個存儲過程
// 存儲名
ALTER PROCEDURE b (
@returnStr nvarchar(MAX) = null OUTPUT) // 輸出returnStr值
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
--更新續費狀態
update a set b='1' ;
set @returnStr ='更新成功。';
END TRY
BEGIN CATCH
set @returnStr ='更新失敗。'
return;
END CATCH
END
10新增字段和註釋
ALTER TABLE 表名 ADD 字段名 類型 默認值 是否爲空;
EXEC sp_addextendedproperty N'MS_Description', N'註釋內容', N'SCHEMA', N'dbo',N'TABLE', N'表名', N'COLUMN', N'字段名';