希望路過的高手指點迷津,新手表示看不懂。
在書上看到一個SQL實現動態交叉表的例子,可是里面的存儲過程看不懂,請問這該怎么理解以下的代碼:
CREATE procedure proc_across_table
@TableName as varchar(50), --生成交叉表依據的表名
@NewColumn as varchar(50), --生成表頭依據的字段名
@GroupColumn as varchar(50), --分組依據的字段名
@StatColumn as varchar(50), --欲統計的字段名
@Operator as varchar(10) --統計的運算方式
AS
DECLARE @SQL as varchar(1000), @Column as varchar(50) --定義參數
EXECUTE ('DECLARE cursor_new_column CURSOR FOR SELECT DISTINCT ' + @NewColumn + ' from ' + @TableName + ' for read only ') --定義游標
begin
SET nocount ON
SET @SQL='select ' + @GroupColumn + ', ' + @Operator + '(' + @StatColumn + ') AS [' + @Operator + ' of ' + @StatColumn + ']' --定義SQL語句頭
OPEN cursor_new_column
while (0=0)
BEGIN --遍歷游標
FETCH NEXT FROM cursor_new_column INTO @Column --通過游標獲取列頭信息
if (@@fetch_status<>0) break
SET @SQL = @SQL + ', ' + @Operator + '(CASE ' + @NewColumn + ' WHEN ''' + @Column + ''' THEN ' + @StatColumn + ' ELSE Null END) AS [' + @Column + ']' --循環追加SQL語句
END
SET @SQL = @SQL + ' from ' + @TableName + ' group by ' + @GroupColumn --定義SQL語句尾
EXECUTE(@SQL) --執行SQL語句
PRINT @SQL --輸出SQL語句
IF @@error <>0 RETURN @@error --如果出錯,則返回錯誤代碼
CLOSE cursor_new_column --關閉游標
DEALLOCATE cursor_new_column RETURN 0 --釋放游標,釋放成功則返回0
end
GO
求教,SQL server存儲過程該怎么理解。
元芳怎么了
2018-12-07 07:50:03