1. 程式人生 > >sqlserver 儲存過程拼接SQL字串有數字的處理辦法

sqlserver 儲存過程拼接SQL字串有數字的處理辦法

資料庫:SQLSERVER2008R2

declare @startRowIndex int;

declare @endRowIndex int;

declare @Sql varchar(1000);

set @startRowIndex=1;

set @endRowIndex=10;

set @Sql='select ROW_NUMBER() over(order by 排序欄位 asc/desc) as rownumber,* from 表 where rownumber between '[email protected]+' and '[email protected]+' ';

EXEC(@Sql);

結果就在執行這條語句的時候報錯了,錯誤提示:無法將這條SQL語句轉化成資料型別int。

分析:因為@startRowIndex和@endRowIndex是整形,而整條語句是一個字串,所以我們必須把@startRowIndex和@endRowIndex轉化為字元。

解決方案:使用SQLSERVER自帶的函式STR()將他們轉化成字元。

正確的寫法:

set @Sql='select ROW_NUMBER() over(order by 排序欄位 asc/desc) as rownumber,* from 表 where rownumber between '+str(@startRowIndex)+' and '+str(@endRowIndex)+' ';

EXEC(@Sql);

相關推薦

sqlserver 儲存過程拼接SQL字串數字處理辦法

資料庫:SQLSERVER2008R2 declare @startRowIndex int; declare @endRowIndex int; declare @Sql varchar(1000); set @startRowIndex=1; set @endRowI

sqlserver儲存過程拼接sql語句,執行報錯“列名無效”

今天寫儲存過程,遇到一個問題,具體如下:需求是要統計一張報表,這張表的列不固定,因此在儲存過程裡做插入語句的時候,就用到了sql語句拼接再執行。這裡拼接的insert語句是set @sql= 'insert into ##tn(prj) values('[email 

sqlserver儲存過程實現資料批量刪除--分割字串實現

寫的儲存過程,接收的引數的一個字串,通過分割字串從而實現批量刪除。 IF (@operation = 'delete') BEGIN DECLARE @temp nvarchar(200) DECLARE @splitchar nvarchar(1) SET

sql儲存過程中分隔字串

最近遇到了如下問題,要向用戶角色資訊表中插入資料。 每個使用者有多個角色,因此每次新增使用者要新增一到多條記錄。 這個過程要放到儲存過程中實現,但是儲存過程不能傳入集合。 解決思路是,將角色Id集合轉成用逗號分隔的字串,在儲存過程中分隔。 那麼儲存過程中

MYSQL儲存過程執行用字串拼成的sql語句

執行的sql必須定義為 @sql  才能執行  否則報錯DROP PROCEDURE IF EXISTS  test_prepareStam;    delimiter // CREATE PROCE

mysql 儲存過程動態sql

DROP PROCEDURE IF EXISTS PRO_STA_SYSTEM_ORDER_STATE; DELIMITER // CREATE DEFINER=`root`@`%` PROCEDURE `PRO_STA_SYSTEM_ORDER_STATE`(OUT O_RESULT_

sqlserver儲存過程/遊標及例項

--系統儲存過程exec sp_databases --檢視系統資料庫exec sp_tables --檢視系統表exec sp_rename 'aaa','bbb' --修改表明aaa為bbbexec sp_rename 'dbo.aaa','col1','col2' --修改表aaa的列col1為col2

SQLSERVER儲存過程的基本語法例項

SQLSERVER儲存過程的基本語法例項 SQLSERVER儲存過程的基本語法例項 一、定義變數--簡單賦值 declare @a intset @a=5 print @a --使用select語句賦值 declare @user1 nvarchar(50) select @user1='張三'prin

mybatis 呼叫sqlserver 儲存過程

<select id="testStoredProcedure" statementType="CALLABLE" resultMap="TestMap"> <![CDATA[ {call AllNewcourse(${shopid},${cours

【mybatis】mybatis呼叫sqlserver儲存過程和表值函式

儲存過程和表值函式的區別 最簡單的區別是儲存過程是pr開頭的,而儲存過程是fn開頭的,表值函式返回的是一個表結構的結果。如果mybatis用呼叫儲存過程的方式去呼叫表值函式,就會丟擲以下的異常: exc

oracle帶輸入輸出引數儲存過程(包括sql分頁功能)

記錄一下,免得以後忘記了又要到處去找。 begin /*這裡不能直接執行select語句但可以直接執行update、delete、insert語句*/ end裡面不能接執行select語句,宣告會話級臨時表必須有“execute immediate 'TRUNCATE TABLE 表名';”這一句不然其他的s

sqlserver儲存過程

儲存過程 Transact-SQL中的儲存過程,非常類似於Java語言中的方法,它可以重複呼叫。當儲存過程執行一次後,可以將語句快取中,這樣下次執行的時候直接使用快取中的語句。這樣就可以提高儲存過程的效能。 儲存過程的概念 儲存過程Procedure是一組為了完

根據 關鍵字 搜尋 sqlserver儲存過程

SQL SERVER  非常好用的根據某個關鍵字查儲存過程: select *  from sys.all_sql_modules   where definition like '%wxface%'

SQLServer-儲存過程

儲存過程 一、定義變數 --簡單賦值 declare @a int set @a=5 print @a --使用select語句賦值 declare @user1 nvarchar(50) select @user1='張三' print @user1 declar

儲存過程&函式-sql

以一下例子以mysql為例: 儲存過程函式函式 函式建立: 需要參入引數user_id是intBEGIN DECLARE ss varchar(100); set ss='aaa'; select name into ss from testuser wher

SQLSERVER 儲存過程中的事務

1 CREATE PROCEDURE ProcedureNamme 2 AS 3 BEGIN 4 SET NOCOUNT ON; 5 6 BEGIN TRY---------------------開始捕捉異常 7 BEGIN TRAN-------

sqlServer儲存過程查詢語句

select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b where a.is_ms_shipped=0 and a.object_id = b.object_i

sqlserver儲存過程where條件引數為空不加入篩選

CREATE PROCEDURE "dbo"."TEST_PRC"( @no_in VARCHAR(20)

sqlserver儲存過程中利用遊標遍歷結果集簡單示例及查詢資料庫時間

本例項用的是sqlserver2005   在儲存過程中遍歷結果,和查詢資料庫中所有 儲存過程名稱 加以處理以文字形式輸出 原始碼: drop procedure findName create procedure findName--建立一個名為findName的儲存過

SQLSERVER 儲存過程實現分頁查詢 C#後臺獲取查詢結果集

一、為什麼要用分頁查詢         在列表查詢時由於資料量非常多,一次性查出來非常慢,也不能一次顯示給客戶端,特別是在使用ExtJS的GridPanel時候,顯示資料量達到200條時對效能影響難以容忍,所以需要考慮將資料分批次查詢出來,每頁顯示一定量的資料,這就是資料要