給SQL Server儲存過程,傳送陣列引數(多個引數)的變通辦法
最近在做開發過程中碰到這麼一個糾結的問題,需要同時插入N條資料,不想在程式裡控制,但是SQL Sever又不支援陣列引數.所以只能用變通的辦法了.利用SQL Server強大的字串處理傳把陣列格式化為類似"3500320083208#3500600520890#3500741122924#3500790143280#3501010510869#3500741129750", 然後在儲存過程中用SubString配合CharIndex把它分割開來。
stored procedured 如下:
--同時插入N條資料
CREATE PROCEDURE dbo.dis_insertBackStation
@delivery varchar(50),
@postationid varchar(50), [email protected] varchar(50)
@sn varchar(500)
AS
DECLARE @PointerPrev int
DECLARE @PointerCurr int
DECLARE @TSn varchar(50)
DECLARE @puid varchar(50),@stid varchar(50),@usid varchar(50)
--DECLARE @TId int
Set @PointerPrev=1
set @PointerCurr=1
begin transaction
Set NoCount ON
--delete from ProductListSpecial where
select @usid = usid from usr_users where username = @delivery --'shoulijun'
select @stid = stid from sta_station where postationid = @postationid --5400010240-- postationid --5480011708
--select @puid = puid from dis_war where sn = @sn --這個sn必須要是分解後的
--第一個
Set @PointerCurr=CharIndex('#',@sn,@PointerPrev+1)
set @TSn=cast(SUBSTRING(@sn,@PointerPrev,@
select @puid = puid from dis_war where sn = @sn --這個sn必須要是分解後的
insert into dis_backstation (bsid,puid,stid,usid,totalmoney,outcash,outmort,incash,ivt,inconvert,createtime) values(NEWID(),@puid,@stid,@usid,0,0,0,0,0,0,GETDATE())
SET @PointerPrev = @PointerCurr
while (@PointerPrev+1 < LEN(@sn))
Begin
Set @PointerCurr=CharIndex('#',@sn,@PointerPrev+1)
if(@PointerCurr>0)
Begin
--中間的
set @TSn=cast(SUBSTRING(@sn,@PointerPrev+1,@[email protected]) as varchar(50))
select @puid = puid from dis_war where sn = @sn --這個sn必須要是分解後的
insert into dis_backstation (bsid,puid,stid,usid,totalmoney,outcash,outmort,incash,ivt,inconvert,createtime) values(NEWID(),@puid,@stid,@usid,0,0,0,0,0,0,GETDATE())
SET @PointerPrev = @PointerCurr
End
else
Break
End
--最後的
set @TSn=cast(SUBSTRING(@sn,@PointerPrev+1,LEN(@sn)[email protected]) as varchar(50))
select @puid = puid from dis_war where sn = @sn --這個sn必須要是分解後的
insert into dis_backstation (bsid,puid,stid,usid,totalmoney,outcash,outmort,incash,ivt,inconvert,createtime) values(NEWID(),@puid,@stid,@usid,0,0,0,0,0,0,GETDATE())
Set NoCount OFF
if @@error=0
begin
commit transaction
end
else
begin
rollback transaction
end
GO
執行前查詢:
select * from dis_backstation order by createtime
執行:
exec dis_insertBackStation 'songlijun','0540002070','3500320083208#3500600520890#3500741122924#3500790143280#3501010510869#3500741129750'
查詢執行後結果:
select * from dis_backstation order by createtime
對比執行前後的結果,可以發現多了6條記錄。此6條即為插入的相關記錄。
相關推薦
給SQL Server儲存過程,傳送陣列引數(多個引數)的變通辦法
最近在做開發過程中碰到這麼一個糾結的問題,需要同時插入N條資料,不想在程式裡控制,但是SQL Sever又不支援陣列引數.所以只能用變通的辦法了.利用SQL Server強大的字串處理傳把陣列格式化為類似"3500320083208#350060052089
Sql server儲存過程以及一次插入多條記錄
首先簡單介紹sql server儲存過程吧。至於概念含義啥的就不做過多介紹了。它其實和mysql有些類似,語法大同小異。 還是用例子說明問題吧。CREATE PROCEDURE insert_supplier @supplier_name varchar(30), @sup
SQL Server儲存過程Return、output引數及使用技巧
SQL Server目前正日益成為WindowNT作業系統上面最為重要的一種資料庫管理系統,隨著 SQL Server2000的推出,微軟的這種資料庫服務系統真正地實現了在WindowsNT/2000系列作業系統一統天下的局面,在微軟的作業系統上,沒有任何一種資料庫系統能
Sql Server 儲存過程呼叫儲存過程接收輸出引數,返回值
CREATE PROCEDURE [dbo].[GetCustomers] (@rowcount INT OUTPUT) AS SELECT [CustomerID] ,[CompanyName] ,[ContactName] ,[
SQL Server儲存過程郵件傳送以表格方式傳送
BEGIN SET NOCOUNT ON; --初始化 Declare @MailTo nvarchar(max) Declare @MailCc nvarchar(max) Declare @MailBcc nvarchar(max) Declare @Ma
sql server 儲存過程傳遞表名引數及Dynamic SQL
ALTER PROCEDURE [dbo].[sp_tablenametest] @table_name varchar(50), @PMId int, @ValueEq int AS BEGIN SET NOCOUNT ON; DECLARE @cmd AS NVARC
sql server 儲存過程中執行帶輸出引數的動態 sql
CREATEprocedure pUserList( @UserTypechar(2), @pagenumint, @perpagesizeint, @pagetotalint out, @rowcountint out)as set nocount on DECL
SQL server 儲存過程的編寫
USE [資料庫名稱] GO /****** Object: StoredProcedure [dbo].[insertbGait] Script Date: 2018/7/17 15:51:22 ******/ SET ANSI_NULLS ON GO
SQL SERVER儲存過程加密和安全上下文
對SQL Server 2008的安全入門略作小結,以作備忘。本文涉及兩個應用:儲存過程加密和安全上下文。 <一>儲存過程加密 SQL server,我已經成了儲存過程的忠實擁躉。在直接使用SQL語句還是儲存過程來處理業務邏輯時,我基本會毫不猶豫地選擇後者。 理由如下:
SQL Server 儲存過程返回值的幾種方式
獲得儲存過程的返回值–通過查詢分析器獲得 (1)不帶任何引數的儲存過程(儲存過程語句中含有return) —建立儲存過程 CREATE PROCEDURE testReturn AS return 145 GO —執行儲存過程 DECLARE @RC int exec @RC=
Yii2.0呼叫sql server儲存過程並獲取返回值
1、首先展示建立sql server儲存過程的語句,建立一個簡單的儲存過程,測試用。 1 SET ANSI_NULLS ON 2 GO 3 SET QUOTED_IDENTIFIER ON 4 GO 5 6 CREATE PROCEDURE [dbo].[register_info]
SQL Server儲存過程的使用
儲存過程概述 簡單來說,儲存過程就是一條或者多條sql語句的集合,可視為批處理檔案,但是其作用不僅限於批處理。 基本概念: SQL Server中的儲存過程是使用T_SQL編寫的程式碼段。它的目的在於能夠方便的從系統表中查詢資訊, 或者完成與更新資料
SQL Server 儲存過程返回值彙總
獲得儲存過程的返回值–通過查詢分析器獲得 (1)不帶任何引數的儲存過程(儲存過程語句中含有return) —建立儲存過程 CREATE PROCEDURE testReturn AS return 145 GO —執行儲存過程 DECLARE @RC in
Sql Server 儲存過程 - 使用者操作例項
使用者的增刪改查 新增 --新增使用者 create procedure addDeviceUser @name nvarchar(36) , @phone nvarchar(36) , @password nvarchar(255) as begin if exists(
Sql server 儲存過程
-- ======================================= -- Author: <zengyongbin> -- Create date: <2018-11-11> -- Description: <新增> --
關於SQL SERVER 儲存過程使用(2)
現在有一場景,需要調用出公司員工在本週的請假天數。程式碼如下(1),本人一開始寫的時候用遍歷裡面套著一個遍歷,發現效果出不來如下(2),求是否有什麼方法可以實現遍歷裡面還有個遍歷。 SQL程式碼(1): --建立儲存過程 create procedure LeaveT
SQL Server儲存過程中top後為變數時的處理
@pageRecordNum為每頁顯示的記錄數,@currentPageNum為當前的頁數 create proc pagination @pageRecordNum int,@currentPageNum int as declare @recNum varchar(
無意中發現的sql server 儲存過程加密破解方法
轉自:https://blog.csdn.net/gatr/article/details/51226122 儲存過程是資料庫中一個非常重要的該部分,很多業務邏輯都可能寫在儲存過程裡面,為了安全,部分儲存過程是加密存放的,如果我們想看到原始碼,就非常困難了,在sql se
SQL SERVER儲存過程批量插入資料庫表資料
CREATEPROCEDURE add_UserInfoASDECLARE@userCodeVARCHAR(30)DECLARE@userNameVARCHAR(30)DECLARE@userCode_baseVARCHAR(30)DECLARE@countINTEGERDECLARE@indexINTEGE
SQL server 儲存過程的建立並使用
什麼是儲存過程呢? 儲存過程就是作為可執行物件存放在資料庫中的一個或多個SQL命令。 通俗來講:儲存過程其實就是能完成一定操作的一組SQL語句。 那為什麼要用儲存過程呢? 1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般SQL語句每執行一