1. 程式人生 > >動態sql語句基本語法

動態sql語句基本語法

1 :普通SQL語句可以用Exec執行

      例:      Select * from tableName

                Exec('select * from tableName')

                Exec sp_executesql N'select * from tableName'    -- 請注意字串前一定要加N

2:欄位名,表名,資料庫名之類作為變數時,必須用動態SQL

    錯誤:        declare @fname varchar(20)

                set @fname = 'FiledName'

                Select @fname from tableName              -- 錯誤,不會提示錯誤,但結果為固定值FiledName,並非所要。

    正確:      Exec('select ' + @fname + ' from tableName')     -- 請注意加號前後的單引號的邊上加空格

    當然將字串改成變數的形式也可

                declare @fname varchar(20)

                set @fname = 'FiledName' --設定欄位名

                declare @s varchar(1000)

                set @s = 'select ' + @fname + ' from tableName'

                Exec(@s)                -- 成功

                exec sp_executesql @s   -- 此句會報錯

              --注:@s引數必須為ntext或nchar或nvarchar型別,必須將declare @s varchar(1000) 改為declare @s Nvarchar(1000)

               如下:
                declare @s Nvarchar(1000) -- 注意此處改為nvarchar(1000)

                set @fname = 'FiledName' --設定欄位名
                set @s = 'select ' + @fname + ' from tableName'

                Exec(@s)                -- 成功   

                exec sp_executesql @s   -- 此句正確

3. 輸入或輸出引數

      (1)輸入引數:
          declare @QueryString nvarchar(1000) --動態查詢語句變數(注:必須為ntext或nchar哐nvarchar型別,不能是varchar型別)
          declare @paramstring nvarchar(200) --設定動態語句中的引數的字串(注:必須為ntext或nchar哐nvarchar型別,不能是varchar型別)
          declare @input_id int--定義需傳入動態語句的引數的值

          set @QueryString='select * from tablename  where [email protected]'  --id為欄位名,@id為要傳入的引數
          set @paramstring='@id int' --設定動態語句中引數的定義的字串
          set @input_id =1  --設定需傳入動態語句的引數的值為1
          exec sp_executesql @querystring,@paramstring,@[email protected]_id  

          若有多個引數:
           declare @QueryString nvarchar(1000) --動態查詢語句變數(注:必須為ntext或nchar哐nvarchar型別,不能是varchar型別)
          declare @paramstring nvarchar(200) --設定動態語句中的引數的字串(注:必須為ntext或nchar哐nvarchar型別,不能是varchar型別)
          declare @input_id int--定義需傳入動態語句的引數的值,引數1
          declare @input_name varchar(20)--定義需傳入動態語句的引數的值,引數2

          set @QueryString='select * from tablename  where [email protected] and [email protected]'   --id與name為欄位名,@id與@name為要傳入的引數
          set @paramstring='@id int,@name varchar(20)' --設定動態語句中引數的定義的字串,多個引數用","隔開
          set @input_id =1  --設定需傳入動態語句的引數的值為1
          set @input_name='張三'   --設定需傳入動態語句的引數的值為"張三"
          exec sp_executesql @querystring,@paramstring,@[email protected]_id,@[email protected]_name --請注意引數的順序
     (2)輸出引數

             declare @num int, @sqls nvarchar(4000) 
            set @sqls='select count(*) from tableName' 
            exec(@sqls)

        --如何將exec執行結果放入變數中?         

        declare @QueryString nvarchar(1000) --動態查詢語名變數(注:必須為ntext或nchar哐nvarchar型別,不能是varchar型別)
        declare @paramstring nvarchar(200) --設定動態語句中的引數的字串(注:必須為ntext或nchar哐nvarchar型別,不能是varchar型別)
        declare @output_result int--查詢結果賦給@output_result 

        set @QueryString='select @totalcount=count(*) from tablename' [email protected] 為輸出結果引數
        set @paramstring='@totalcount int output' --設定動態語句中引數的定義的字串,多個引數用","隔開
        exec sp_executesql @querystring,@paramstring,@[email protected]_result output
        select @output_result

        當然,輸入與輸出引數可以一起使用,大家可以自己去試一試。
        另外,動態語句查詢的結果集要輸出的話,我只想到以下用臨時表的方法,不知各位有沒有更好的方法.
        IF object_id('[tempdb].[dbo].#tmp') IS NOT NULL --判斷臨時表#tmp是否存在,存在則刪除
            drop table #tmp
        select * into #tmp from tablename where 1=2 --建立臨時表#tmp,其結構與tablename相同

        declare @QueryString nvarchar(1000) --動態查詢語名變數(注:必須為ntext或nchar哐nvarchar型別,不能是varchar型別)
        set @QueryString='select * from tablename '
        insert into #tmp(field1,field2,...) exec(@querystirng) 

相關推薦

動態sql語句基本語法--Exec與Exec sp_executesql 的區別

動態sql語句基本語法    1   :普通SQL語句可以用Exec執行    eg:       Select   *   from   tableName                      Exec( 'select   *   from   tableName ')               

動態sql語句基本語法

1 :普通SQL語句可以用Exec執行       例:      Select * from tableName                 Exec('select * from tableName')                 Exec sp_execut

SQL語句基本語法

sql首先寫入可顯示中文代碼set character_set_client=gbk; set character_set_results=gbk;或只輸一句 set names gbk;創建數據庫create database 庫名;查詢現有數據局show databases;刪除數據庫drop data

Mybatis動態sql語句(OGNL語法)

type 語法 key ognl select 動態 font tab class 下面是Mybatis動態sql語句(即OGNL語法)的簡單案例 1.創建表 create table test(id int primary key auto_increment,n

SQL基本語法練習

col to_char 通用 模糊 工資 轉換成 截斷 使用 round select EMPNO,SAL from emp where SAL BETWEEN 1000 and 2000--從enp中獲取sal中1000到2000之間的數據 select ENAME,S

存儲過程中執行動態Sql語句

查詢 需要 一點 定義 data 復制 ast 我們 臨時   在最近的項目中,有用到動態執行sql語句,SQL為我們提供了兩種動態執行SQL語句的命令,分別是EXEC和sp_executesql;通常,sp_executesql則更具有優勢,它提供了輸入輸出接口,而EXE

Mybatis中的update動態SQL語句 <trim></trim> 用法

color 單獨 null 多個 ride 逗號 myba 不用 log Mybatis Mapper中文件中 update時,需要set設置多個字段,有時逗號處理時,會報錯誤,所以會使用到<trim></trim> 使用trim就是為了刪掉最後

MySQL基礎----動態SQL語句

字段名 基礎 art prepare eat file 動態 執行 esql 尊重原創:http://blog.csdn.net/abc19900828/article/details/39501643 動態sql語句基本語法 1 :普通SQL語句可以用Exec執行 e

怎樣SQL存儲過程中執行動態SQL語句

緩存 參數 insert 每次 一點 證明 record scac 清空緩存 MSSQL為我們提供了兩種動態執行SQL語句的命令,分別是EXEC和sp_executesql;通常,sp_executesql則更具有優勢,它提供了輸入輸出接口,而EXEC沒有。還有一個最大的好

MyBatis中動態SQL語句完成多條件查詢

null nbsp mybatis myba 查詢 from ref HR OS http://blog.csdn.net/yanggaosheng/article/details/46685565 MyBatis中動態SQL語句完成多條件查詢 <select i

Mybatis動態SQL語句使用

第一個 from 在外 字符串 each nbsp mea pack ger 在實際開發中,有時候查詢條件可能是不確定的,查詢條件可能有多條也可能沒有,這時候就需要用到動態的sql語句拼接功能。 一、if、where、sql標簽的使用 需求:在一些高級查詢中,查詢條件存

專案問題記錄------Mabatis動態sql語句

現在在做一個模糊查詢功能,使用兩個查詢條件:   條件1:下拉框選擇的產品名 條件2:輸入框輸入的使用者名稱 需求1:下拉框的選項是從資料庫裡匯出來的產品名,此外,新增一個選項“全部產品”,即使用者可以選擇某個產品,也可以選擇所有產品; 需求2:輸入框可以輸入,也可以不輸入,輸入就按輸

MySQL資料庫學習(一)SQL語言基本語法

一、什麼是資料庫 資料庫(Database)是按照資料結構來組織、儲存和管理資料的倉庫。 每個資料庫都有一個或多個不同的API用於建立,訪問,管理,搜尋和複製所儲存的資料。 通常使用關係型資料庫管理系統(RDBMS)來儲存和管理的大資料量。 所謂的關係型資料庫,是建立在關係模

踩坑經歷(六)MySQL之生成動態SQL語句

delimiter $$ drop procedure if exists test_tb; create procedure test_tb() begin #DECLARE t_error INTEGER DEFAULT 0; -- DECLARE u

使用Mybatis動態sql語句時出現:元素內容必須由格式正確的字元資料或標記組成

>號用&gt;表示,<號用&lt;表示 @Select("<script> select sum(amount) from user_bills where " + " bill_type=#{billType

mybatis基於XML配置的動態SQL語句

mybatis動態SQL語句 mappers配置檔案中的幾個標籤: <if> <where> <foreach> <sql> If標籤 1 . 作用: 當if標籤的test成立時,就把i

18 12 4 SQL基本 語法

資料庫的基本語法       -- 資料庫的操作 -- 連結資料庫 mysql -uroot -p mysql -uroot -pmysql -- 退出資料庫 exit/quit/ctrl+d -- s

mybatis-動態SQL語句

一、CONCAT字串拼接 1. sql中字串拼接    SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 2. 使用 ${...} 代替 #{...}    SELEC

mybatis動態sql語句

mybatis 的動態sql語句是基於OGNL表示式的。可以方便的在 sql 語句中實現某些邏輯. 總體說來mybatis 動態SQL 語句主要有以下幾類: if 語句 (簡單的條件判斷) choose (when,otherwize) ,相當於java

mybatis 動態sql語句

mybatis 的動態sql語句是基於OGNL表示式的。可以方便的在 sql 語句中實現某些邏輯. 總體說來mybatis 動態SQL 語句主要有以下幾類: if 語句 (簡單的條件判斷) choose (when,otherwize) ,相當於java 語言