




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 T-SQL编程膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃蚇羆莆蚂蚆肈腿薈蚅膀莅蒄螄袀膇莀螃羂莃芆螃膅膆蚄螂袄蒁薀螁羇芄蒆螀聿葿莂蝿膁节蚁螈袁肅薇袈羃芁蒃袇肆肃荿袆螅艿莅袅羈膂蚃袄肀莇蕿袃膂膀蒅袂袂莅莁袂羄膈蚀羁肆莄薆羀腿膆蒂罿袈莂蒈薅肁芅莄薅膃蒀蚃薄袃芃蕿薃羅葿蒅薂肇芁莁蚁膀肄虿蚀衿芀薅虿羂肂薁虿膄莈蒇蚈袄膁莃葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁芁膄薁羃肄蒃薀蚃袇荿薀螅肃芅虿袈袅膁蚈薇肁肇蚇蚀袄蒅蚆袂聿莁蚅羄羂芇蚄蚄膇膃蚄螆羀蒂蚃袈膆莈螂羁罿芄螁蚀膄膀莇螃羇肆莇羅膂蒅莆蚅肅莁莅螇芁芇莄衿肃膃莃羂袆蒁蒂蚁肂莇蒂螄袄芃蒁袆肀腿蒀蚆袃膅葿螈膈蒄蒈袀羁莀蒇羂膇芆蒆蚂罿膂薆螄膅肈薅袇羈莆薄薆膃节薃蝿羆芈薂袁 第6章T-SQL编程 教学目标本章介绍了T-SQL程序设计中GO语句的使用、变量的定义、输入输出的格式以及注释的使用,介绍了流程控制语句以及游标的使用。 教学要求知 识 要 点能 力 要 求相 关 知 识T-SQL基础掌握T-SQL程序设计中GO语句的使用、变量的定义以及注释的使用GO语句、变量、注释流程控制语句掌握T-SQL程序设计中流程控制语句的使用选择语句、循环语句、 转移语句、等待语句、返回语句游标的使用掌握T-SQL程序设计中游标的使用游标的基础、游标的使用导读上一章介绍的插入、查询、更新和删除等SQL语句均是单条的语句,不能定义变量,没有流程控制语句,因此,无法实现复杂的业务规则控制。为解决此问题,本章介绍SQL程序设计,将学习变量的定义、赋值、流程控制和游标等内容。其中流程控制语句包括顺序、选择、循环结构的控制语句,是数据库应用程序设计的基础。通过本章学习,读者应掌握如何用流程控制语句进行SQL设计程序,理解游标的意义,掌握游标的创建与使用。6.1 T-SQL基础6.1.1 GO的使用批处理是一组SQL语句的集合,以结束符GO终结。批处理中的所有语句被一次提交SQL Server 2005,SQL Server 2005将这些语句编译为一个执行单元,称为SQL Server 2005执行计划。批处理用GO语句作为批处理的结束标志,若没有GO语句,默认所有的语句属于一个批处理。提示:在一个批处理中,如果出现编译错误(如某条语句存在语法错误),SQL Server 2005将取消整个批处理内所有语句的执行。6.1.2 T-SQL变量变量是SQL Server 2005用来在语句之间传递数据的方式之一,是一种语言中必不可少的组成部分。1T-SQL变量 T-SQL变量也称为局部变量,或用户自定义变量。一般用于临时存储各种类型的数据,以便在SQL语句之间传递。例如作为循环变量控制循环次数,暂时保存函数或存储过程返回的值,也可以使用table类型代替临时表临时存放一张表的全部数据。局部变量的作用范围是在一个批处理、一个存储过程或一个触发器内,其生命周期从定义开始到它遇到的第一个GO语句或者到存储过程、触发器的结尾结束,即局部变量只在当前的批处理、存储过程、触发器中有效。提示:如果在批处理、存储过程、触发器中使用其他批处理、存储过程、触发器定义的变量,则系统出现错误并提示“必须声明变量”。用DECLARE语句声明定义局部变量命令格式:DECLARE 变量名 数据类型(长度) ,n 说明:l 局部变量必须以开头以区别字段名变量。l 变量名必须符合标识符的构成规则。l 系统固定长度的数据类型不需要指定长度,例如:INT或DATETIME。提示:局部变量的数据类型可以是系统类型,也可以是用户自定义类型,但不允许是text、ntext、image类型。【例6-1】 变量的定义DECLARE name CHAR (8)-定义name长度为8的字符型 DECLARE m INT,n DECIMAL (6,2)-定义m为整型,n为小数总长度6位,其中小数2位,不计小数点6.1.3 输入输出1输入用SET、SELECT给局部变量赋值命令格式:SET 局部变量=表达式SELECT 局部变量=表达式 ,n说明:l SET只能给一个变量赋值,而SELECT可以给多个变量赋值。l 两种格式可以通用,建议首选使用SET,而不推荐使用SELECT语句。l SELECT也可以直接使用查询的单值结果给局部变量赋值。如:SELECT 局部变量=表达式或字段名FROM 表名 WHERE 条件提示:表达式中可以包含SELECT语句子查询,但只能是集合函数返回的单值,且必须用圆括号括起来。2输出用PRINT、SELECT显示局部变量的值命令格式:PRINT 表达式SELECT 表达式 ,n 说明:l 使用PRINT必须有且只能有一个表达式,其值在查询分析器的“消息”子窗口显示。l 使用SELECT实际是无数据源检索格式,可以有多个表达式,其结果是按数据表的格式在查询分析器的“网格”子窗口显示,若不指定别名显示标题“(无名列)”。【例6-2】 自定义局部变量的使用USE Student_Course_Teacher DECLARE name varchar(15), 学号 char(22) SELECT 学号=学号为s1的学生的姓名: - 也可使用SET SET name= (SELECT Sn FROM s where sno=s1) PRINT 学号+ name GO运行结果如图6.1所示。使用PRINT在“消息”子窗口输出表达式的值图6.1 自定义局部变量的使用想一想:如果将例题中的输出显示改用SELECT语句,输出结果是什么样的?6.1.4 注释注释是程序的说明或暂时禁止使用的语句而不被执行,使用注释可以使程序清晰可读,有助于以后的管理维护。SQL Server支持行注释和块注释两种方式。1行内注释命令格式:-注释内容说明:(1) 以两个减号开始直到本行结束的全部内容都被认为是注释内容。(2) 行注释可以单独一行,也可以跟在SQL语句之后,注释内容中还可以有双减号(允许嵌套),双减号之后也可以没有内容。2块注释命令格式:/*注释内容*/说明:(1) 以“/*”开始不论多少行,直到“*/”之间的所有文字都被作为注释内容。(2) 块注释可以从一行开头开始,也可以跟在SQL语句之后开始,注释内容中还可以有“/*”字符组合,也可以有单个“*”“/”字符,但不能有“*/”组合(不允许嵌套),中间可以没有注释内容。【例6-3】 注释的使用 USE Student_Course_Teacher /*打开数据库*/ GO - 一个批处理结束6.2 流程控制语句流程控制语句是控制程序执行的命令,是指那些用来控制程序执行和流程分支的命令,流程控制语句主要用来控制SQL语句、语句块或者存储过程的执行流程。比如条件控制语句、循环语句等,可以实现程序的结构性和逻辑性,以完成比较复杂的操作。6.2.1 语句块BEGINEND语句能够将多个T-SQL语句组合成一个语句块,并将它们视为一个单元处理。在条件语句和循环等控制流程语句中,当符合特定条件便要执行两个或者多个语句时,就需要使用BEGINEND语句,将多个T-SQL语句组合成一个语句块。6.2.2 选择1IF/ELSE条件语句IFELSE语句是条件判断语句,其中,ELSE子句是可选的,最简单的IF语句没有ELSE子句部分。IFELSE语句用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。SQL Server允许嵌套使用IFELSE语句,而且嵌套层数没有限制。命令格式: IF 逻辑条件表达式 语句块1 ELSE 语句块2说明:(1) IF语句执行时先判断逻辑条件表达式的值(只能取TRUE或FLASE),若为真则执行语句块1,为假则执行语句块2,没有ELSE则直接执行后继语句。(2) 语句块1、语句块2可以是单个SQL语句,如果有两个以上语句,但必须放在BEGINEND语句块中。【例6-4】 查询教师平均工资,如果平均工资大于3000元,则显示“收入水平较高”,否则显示“收入水平较低”。Use Student_Course_TeacherGoIF (SELECT AVG (sal) FROM t)3000 BEGIN PRINT 收入水平较高 ENDELSE PRINT 收入水平较低运行结果如图6.2所示。图6.2 例6-4执行结果提示:条件表达式中可以包含SELECT子查询,但必须用圆括号括起来。2CASE语句CASE表达式可以根据不同的条件返回不同的值,CASE不是独立的语句,只用于SQL语句中允许使用表达式的位置。(1) 简单CASEEND表达式命令格式:CASE 测试表达式WHEN 常量值1 THEN 结果表达式1 WHEN 常量值2 THEN 结果表达式2 n ELSE 结果表达式n END说明:根据测试表达式的值得到一个对应值。先计算测试表达式的值,将测试表达式的值按顺序依次与WHEN指定的各个常量值进行比较:l 如果找到了一个相等常量值,则整个CASE表达式取相应THEN指定的结果表达式的值,之后不再比较,跳出CASEEND。l 如果找不到相等的常量值,则取ELSE指定的结果表达式n。l 如果找不到相等的常量值也没有使用ELSE,则返回NULL。【例6-5】 查询教师工资,工资为3000元的显示“平均收入者”,工资为2000元的显示为“低收入者”,工资为4000元的显示为“高收入者”,其余的显示“未知”。Use Student_Course_TeacherGo SELECT tn 教师姓名,收入水平=CASE salWHEN 3000 THEN 平均收入者WHEN 2000 THEN 低收入者WHEN 4000 THEN 高收入者ELSE 未知ENDFROM T运行结果如图6.3所示。图6.3 例6-5执行结果(2) 搜索CASE END表达式命令格式:CASEWHEN 条件表达式1 THEN 结果表达式1WHEN条件表达式2 THEN 结果表达式2 n ELSE 结果表达式n END说明:根据某个条件得到一个对应值,执行过程:l 按顺序依次判断WHEN指定条件表达式的值,遇到第一个为真的条件表达式,则整个CASE表达式取对应THEN指定的结果表达式的值,之后不再比较,结束并跳出CASEEND。l 如果找不到为真的条件表达式,则取ELSE指定的结果表达式n。l 如果找不到为真的条件表达式也没有使用ELSE,则返回NULL。提示:搜索CASE表达式与简单CASE表达式的语法区别是CASE后没有测试表达式,WHEN指定的不是常量值而是条件表达式。【例6-6】 查询教师工资,大于平均工资的显示“高收入者”,低于平均工资的显示为“低收入者”,否则显示为“平均收入者”。Use Student_Course_TeacherGo SELECT tn 教师姓名,收入水平=CASEWHEN sal(SELECT AVG(sal) FROM T) THEN 高收入者ELSE 平均收入者ENDFROM T运行结果如图6.4所示。图6.4 例6-6执行结果6.2.3 循环在程序中当需要多次重复处理某项工作时,就需使用WHILE循环语句。WHILE语句通过布尔表达式来设置一个循环条件,当条件为真时,重复执行一个SQL语句或语句块,否则退出循环,继续执行后面语句。命令格式:WHILE 逻辑条件表达式 BEGIN 循环体语句系列 BREAK CONTINUE END说明:先计算判断条件表达式的值(1) 若条件为真则执行BEGIN END之间的循环体语句系列,执行到END时返回到WHILE再次判断条件表达式的值。(2) 若值为假(条件不成立)则直接跳过BEGIN END不执行循环。(3) 若在执行循环体时遇到BREAK语句,则无条件跳出BEGIN END。(4) 若在执行循环体时遇到CONTINUE语句,则结束本轮循环,不再执行之后的循环体语句,返回到WHILE再次判断条件表达式的值。【例6-7】 计算1+2+3+100的和。DECLARE i Int, sum Int SELECT i=1, sum =0 - 可以使用两个SET语句 WHILE i=100 SELECT sum=sum+i, i=i+1 PRINT sum想一想:如果准备给教师增加工资,每次每人增加200元,直至平均工资超过3500元结束,请问如何实现?6.2.4 转移GOTO用来改变程序执行的流程,使程序跳到标有标签的程序处继续执行,不执行GOTO语句和标签之间的语句。命令格式:Llabel_name:GOTO Llabel_name说明:标签是GOTO的目标,它仅标识了跳转的目标。标签不隔离其前后的语句。执行标签前面语句的用户将跳过标签并执行标签后的语句。除非标签前面的语句本身是控制流语句(如RETURN),这种情况才会发生。提示:尽量少使用GOTO语句。过多使用GOTO语句可能会使T-SQL批处理的逻辑难于理解。使用GOTO实现的逻辑几乎完全可以使用其他控制流语句实现。GOTO最好用于跳出深层嵌套的控制流语句。【例6-8】 分行打印字符1至5DECLARE Fcount INTBEGIN SELECT Fcount=1 Label_1: PRINT Cast (Fcount as VARCHAR) SELECT Fcount=Fcount+1 WHILE Fcount6 GOTO Label_1END6.2.5 等待WAITFOR语句用于暂时停止执SQL语句、语句块或者存储过程等,直到所设定的时间已过或者所设定的时间已到才继续执行。命令格式:WAITFOR DELAY 时间 | TIME 时间 说明:使程序暂停指定的时间后再继续执行。DELAY指定暂停的时间长短相对时间。TIME指定暂停到什么时间再重新执行程序绝对时间。时间参数必须是datetime类型的时间部分,格式为“hh:mm:ss”,不能含有日期部分。【例6-9】 示例Use Student_Course_TeacherGoWAITFOR delay 00:00:03 -将在3秒钟之后执行select语句SELECT * FROM T6.2.6 返回RETURN语句用于无条件地终止一个查询、存储过程或者批处理,此时位于RETURN语句之后的程序将不会被执行。当在存储过程中使用Return语句时,此语句可以指定返回给调用的应用程序、批处理或过程的整数值。如Return未指定值,则存储过程返回0。大多数存储过程按常规使用返回代码表示存储过程的成功或失败。没有发生错误时存储过程返回0。任何非零值表示有错误发生。命令格式:RETURN integer_expression说明:参数integer_expression为返回的整型值。存储过程可以给调用过程或应用程序,返回整型值。6.3 游标的使用在数据库开发过程中,当你检索的数据只是一条记录时,你所编写的语句代码往往使用SELECT语句。但是我们常常会遇到这样情况,即如何从有多条记录的结果集中去逐一地读取一条记录呢?游标为我们提供了一种极为优秀的解决方案。6.3.1 游标基础在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标的主要用途就是在T-SQL脚本程序、存储过程、触发器中对SELECT语句返回的结果集进行逐行逐字段处理,把一个完整的数据表按行分开,一行一行的逐一提取记录,并从这一记录行中逐一提取各项数据。游标与变量类似,必须先定义后使用。游标的使用过程:定义声明游标打开游标从游标中提取记录并分离数据关闭游标释放游标。6.3.2 游标使用1定义游标命令格式:DECLARE 游标名 CURSOR FORWARD_ONLY|SCROLL STATIC|KEYSET|DYNAMIC|FAST_FORWARD READ_ONLY|OPTIMISTIC TYPE_WARNING FOR SELECT语句 FOR UPDATE OF 字段名 , n 说明:l FORWARD_ONLY指定该游标为顺序结果集,只能用NEXT向后方式顺序提取记录。l SCROLL指定该游标为滚动结果集,可以使用向前、向后、定位方式提取记录。l STATIC与INSENSITIVE含义相同,在系统tempdb数据库中创建临时表存储游标使用的数据,即游标不会随基本表内容而变化,同时也无法通过游标来更新基本表。l KEYSET指定游标中列的顺序是固定的,并且在tempdb内建立一个KEYSET表,基本表数据修改时能反映到游标中。如果基本表添加符合游标的新记录时该游标无法读取(但其他语句使用WHERE CURRENT OF子句可对游标中新添加的记录数据进行修改)。如果游标中的一行被删除掉,则用游标提取时FETCH_STATUS的返回值为-2。l DYNAMIC 指定游标中的数据将随基本表而变化,但需要大量的游标资源。l FAST_FORWARD指定FORWARD_ONLY而且READ_ONLY类型游标。使用FAST_FORWARD参数则不能同时使用FORWARD_ONLY、SCROLL、OPTIMISTIC或FOR UPDATE参数。l OPTIMISTIC指明若游标中的数据已发生变化,则对游标数据进行更新或删除时可能会导致失败。l TYPE_WARNING 指定若游标中的数据类型被修改成其他类型时,给客户端发送警告。提示:若省略FORWARD_ONLY|SCROLL则不使用STATIC、KEYSET和DYNAMIC时默认为FORWARD_ONLY游标,使用STATIC、KEYSET或DYNAMIC之一则默认为SCROLL游标。提示:若省略READ_ONLY|OPTIMISTIC参数,则默认选项为:如果未使用UPDATE参数不支持更新,则游标为READ_ONLY;STATIC和FAST_FORWARD类型游标默认为READ_ONLY;DYNAMIC和KEYSET类型游标默认为OPTIMISTIC。【例6-10】 标准游标Use Student_Course_TeacherGoDECLARE YB1 CURSORFOR SELECT * FROM T【例6-11】 只读游标Use Student_Course_TeacherGoDECLARE YB2 CURSOR FOR SELECT * FROM TFOR READ ONLY2打开游标命令格式:OPEN GLOBAL 游标名说明:打开指定的游标,如果全局游标与局部游标同名时,GLOBAL表示打开全局游标,省略为打开局部游标。用DECLARE定义的游标,必须打开以后才能对游标中的结果集进行处理。就是说DECLARE只声明了游标的结构格式,打开游标才执行SELECT语句得到游标中的结果集。提示:打开游标后,可以使用全局变量ERROR判断该游标是否打开成功。ERROR为0则打开成功,否则打开失败。3从游标中提取数据命令格式:FETCHNEXT|PRIORr|FIRST|LAST| ABSOLUTEn|nvar|RELATIVEn|nvarFROM GLOBAL 游标名 INTO 变量名 , n 说明:(1) 在游标内有一个游标指针CURSOR指向游标结果集的某个记录行称为当前行,游标刚打开时CURSOR指向游标结果集第一行之前。(2) FETCH之后的参数为提取记录的方式,可以是以下方式之一:l NEXT顺序向下提取当前记录行的下一行,并将其作为当前行。第一次对游标操作时取第一行为当前行,处理完最后一行,再用FETCH NEXT则CURSOR指向结果集最后一行之后,FETCH_STATUS的值为-1。l PRIOR顺序向前提取当前记录的前一行,并将其作为当前行。第一次用FETCH PRIOR对游标操作时,没有记录返回,游标指针CURSOR仍指向第一行之前。l FIRST提取游标结果集的第一条记录,并将其作为当前行。l LAST提取游标结果集的最后一条记录,并将其作为当前行。l ABSOLUTEn|nvar按绝对位置提取游标结果集的第n或第nvar条记录,并将其作为当前行。若n或nvar为负值则提取结尾之前的倒数第n或第nvar条记录。n为整数,nvar为整数类型变量。l RELATIVEn|nvar按相对位置提取当前记录之后(正值)或之前(负值)的第n或第nvar条记录,并将其作为当前行。(3) FROM指定提取记录的游标,GLOBAL用于指定全局游标,省略为局部游标。(4) INTO指定将提取记录中的字段数据存入对应的局部变量中。变量名列表的个数、类型必须与结果集中记录的字段的个数、类型相匹配。(5) 打开游标用FETCH提取记录后,可用FETCH_STATUS检测游标的当前状态。FETCH_STATUS的返回值为:0:FETCH语句提取记录成功-1:FETCH语句执行失败或提取的记录不在结果集内-2:被提取的记录已被删除或根本不存在提示:FETCH_STATUS只能检测游标提取记录后的状态,若用作循环条件输出多条记录时,必须在循环之前先用FETCH提取一条记录,再用FETCH_STATUS判断提取记录是否成功,以确定是否进行循环。4关闭游标命令格式:CLOSE GLOBAL 游标名说明:释放游标中的结果集,解除游标记录行上的游标指针。当游标提取记录完毕后,应及时关闭该游标释放结果集的内存空间。游标关闭后,其定义结构仍然
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 东南亚跨境电商市场本土化支付与结算服务研究报告
- 智能语音语义理解在智能家居安防系统2025年技术创新研究报告
- 英语四级往年真题及答案
- 2024年江苏省连云港市中考语文真题及答案解析
- 安全培训的要领课件
- 哈士奇面试真题及答案
- 工程业主方组织方案(3篇)
- 富阳学院安全员培训课件
- 2025年装配技能试卷及答案
- 2025年LNG加气站设备项目合作计划书
- 学前教育自然科学课程
- 2024年5月12日河北省省直事业单位招聘(综合类)工作人员《职业能力测验》试题真题试卷答案解析
- 接警调度面试题及答案
- 课题开题报告:专精特新企业新质生产力的动态演化、形成机理与实践路径研究
- 2025-2030中国建筑工程质量检测设备行业市场发展现状及竞争格局与投资前景研究报告
- 2025新人教版语文七年级上册(全册)教案教学设计(有教学反思)
- 人教版五年级数学上册教学计划(含进度表)
- 马克思主义政治经济学研究范式
- 模具移交协议书范本
- 【课件】2024新课标Ⅱ卷语法填空说课 课件-2025届高三上学期英语一轮复习专项
- 2025年新人教版八年级下册物理全册教案
评论
0/150
提交评论