SQL Server 2014 Management Studio 筆記 (二)

  • 2958
  • 0
  • 2017-08-30

此篇主要紀錄SSMS的相關設定、撰寫Stored Procedure相關要點、SQL語法。


 

T-SQL 相關語法設定與函數 : 

  • 標準化 WHERE COLUMNNAME = NULL
    SET ANSI_NULLS ON
  • 再SSMS中Tsql的指令可接受雙引號『 " 』
    SET QUOTED_IDENTIFIER OFF
  • 不回傳受影響資料筆數的資訊
        強調 : 自訂程序中使用 SET NOCOUNT ON 陳述式。在C#中使用 SqlCommand.ExecuteNonQuery 方法的回傳值永遠是 -1。 
    SET NOCOUNT ON
  • 該函數表示當前受影響資料筆數
    @@ROWCOUNT
  • 若影響資料筆數超過20億,只能使用以下函數。不過該函數對小弟來說如同虛設。
    ROWCOUNT_BIG()
  • 使用該函數得知修改資料時有無發生錯誤
    @@Error

 

演示 Stored Procedure撰寫方法 && 在SSMS中使用方式 : 

撰寫預存程序 : 

USE [資料庫名稱] /*會在該資料庫中產生該預存程序*/
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [預存程序的名稱](@TbName NVARCHAR(50),@OutP INT = NULL OUT)
/* 
    應把該程序的目的註解起來且包含著注意要點
    --該程序是取得資料表的總筆數
    --參數 1.TB名稱 
    --若找無資料表或欄位名稱時 找無TB RETURN 1
    --若查詢時發生錯誤,系統報錯。並回傳 -1
    --若預設值都正確,找到資料後或無找無資料 RETURN 0 , 
    --輸出參數 @OutP 回傳找到的數量。
*/
AS
BEGIN
    SET NOCOUNT ON;
    EXEC @spReturn =  [dbo].[CheckSpHave_TableOrColumn] @TbName /*使用預存程序檢查TB是否存在*/
    IF @spReturn <> 0 BEGIN RETURN @spReturn END
    DECLARE @sqlcmd NVARCHAR(100) = ''
    SET @sqlcmd = @sqlcmd + N'SELECT @OutP = COUNT(*)FROM '+@TbName
    BEGIN TRY
        BEGIN
            /*使用T-SQL中的函數執行含有輸出參數的字串*/
            EXEC [dbo].sp_executesql @sqlcmd,N'@OutP int OUTPUT',@OutP OUT
            RETURN 0
        END
    END TRY
    BEGIN CATCH
        PRINT N'Error Line: ' + CONVERT(NVARCHAR(100),ERROR_LINE())
        PRINT N'Error Number: '+CONVERT(NVARCHAR(100),ERROR_NUMBER())
        PRINT N'Error Message: ' +CONVERT(NVARCHAR(100),ERROR_MESSAGE())
        RETURN -1
    END CATCH
END

在SSMS中使用上面的預存程序範例 : 

USE [資料庫名稱]
GO
DECLARE @TbName NVARCHAR(20) = 'Consultants',@SpReturn INT = Null

/*預存程序中若有輸出的參數一定要加 OUT ,否則無法接收*/
EXEC [dbo].[預存程序名稱] @TbName,@SpReturn OUT 

PRINT 'Consultants資料表總筆數: ' + CONVERT(NVARCHAR(10),@SpReturn)

 

SQL語法: 資料表複製

  • 只複製結構,不複製資料
      SELECT * INTO 新table FROM 舊table WHERE 1=0 
  • 複製結構也複製資料
      SELECT * INTO 新table FROM 舊table 
  • 指定匯入某欄位的資料至新的資料表
      SELECT a,b,c INTO 新table FROM 舊table 
  • 將A table某欄位資料複製到B table某欄位
      UPDATE B SER B's column= (SELECT a's column FROM A WHERE A's column=B's column) 
  • 選取B_able某欄位匯入資料至「已存在的A_table」的欄位中
      INSERT INTO A_table(A.欄1,A.欄2) SELECT (B.欄1,B.欄2) FROM B_able

 

預存程序參考 : (忘記從哪取得的但都是網路上參考的)

 

 


多多指教!! 歡迎交流!!

你不知道自己不知道,那你會以為你知道