1. 程式人生 > 其它 >SQLServer 儲存過程 自定義函式 注意事項

SQLServer 儲存過程 自定義函式 注意事項

SQLServer 儲存過程 自定義函式 注意事項

賦值

兩種賦值方法

declare @appVersion nvarchar(100)

-- 第一種
set @appVersion = (select top 1 AppVersion from AppList order by Dataid desc
                   
-- 第二種
select top 1 @appVersion = AppVersion from AppList order by Dataid desc   

在語句中呼叫引數

一般如果是整形數字都可以直接呼叫,比如各類編號

declare @appSN int
declare @appName nvarchar(100)

select top 1 AppVersion from AppList where AppSN=@appSN order by Dataid desc

但如果是字串或日期等需要' '修飾的引數需要用''來轉義'

declare @appName nvarchar(100)

select top 1 AppVersion from AppList where AppName='' + @appName + '' order by Dataid desc

最後,引數可能是表名或列名。我學到的辦法是,再新建一個變數用於拼接sql語句,再執行這個拼接成的sql語句

declare @TypeSN nvarchar(100)
declare @TableName nvarchar(100)
declare @sql nvarchar(MAX)
declare @AppSN int
declare @AppName int

set @sql = 'update '+@TableName+' set AppVersion=1001 where AppSN=1'
exec(@sql)

-- 當然還有多種延伸
-- 1.表名需要預處理,例:一個固定字元與引數的部分擷取
set @TableName = 'APP_'+substring(@TypeSN,1,2)
-- 2.拼接的SQL語句中需要使用''。使用 '' 代替 '
set @sql = 'update '+@TableName+' set AppVersion=1002 where AppName=''國服'''
-- 3.拼接的SQL語句中還有其他數值引數。
set @sql = 'update '+@TableName+' set AppVersion=1002 where AppSN='+@AppSN+''
-- 4.拼接的SQL語句中還有其他數值引數。且該引數必須用''修飾
set @sql = 'update '+@TableName+' set AppVersion=1002 where AppName='''+@AppName+''''

總結大體規律:

  1. 拼接sql語句,則其必須被‘’包裹,也就是'【sql語句】'
  2. '【sql語句】'中。若要呼叫引數,使用格式'+【引數】+'
  3. '【sql語句】'中。若要使用',使用格式''代替

Null判斷

若在if語句中判斷一個值是否為null必須使用if(@appVersion is NULL)if(@appVersion = NULL)``if(@appVersion = null)都不行。被這個坑了好幾次,老是忘。