Mssql 传入表名参数,调用表中的多条数据

在网上找了一些例子感觉并不是很理想

CREATE TABLE temp1
(
  YDLX VARCHAR(100),
  YDBH VARCHAR(100)
)
INSERT INTO temp1( YDLX, YDBH )VALUES  ( '02','YD002')
INSERT INTO temp1( YDLX, YDBH )VALUES  ( '03','YD004')

假如传入表名为#temp1,现在要调用这个表一些数据,参数@table

select *from @table

这个是肯定不行的,需要exec输出结果值


DECLARE @table VARCHAR(100)
SET @table ='temp1'
----------------------------------
DECLARE @YDBH VARCHAR(100)
DECLARE @YDLX VARCHAR(100)
SET @YDBH=''
SET @YDLX=''
DECLARE @sql  nvarchar(max)
SET @sql ='SELECT @a =YDBH,@b=YDLX FROM '+ @table + ''	
PRINT @sql
exec sp_executesql @sql,N'@a VARCHAR(100) output,@b VARCHAR(100) output',@a=@YDBH OUTPUT,@b=@YDLX OUTPUT

SELECT @YDBH,@YDLX

--YD004	03  ----结果--
然而就出来一条数据,这不是我们要的结果,把上面修改下,拼接出来

SET @sql ='SELECT @a = @a +YDBH+'',''+YDLX+'';'' FROM '+ @table + ''	
PRINT @sql
exec sp_executesql @sql,N'@a VARCHAR(100) output',@a=@YDBH OUTPUT

SELECT @YDBH
--YD002,02;YD004,03;  --结果--

这个数据才是我们需要的,我们只需要把@YDBH这个参数还原成以前的样子就好了,需要多次分割

SET @YDBH=LEFT(@YDBH,LEN(@YDBH)-1)
--分割一下		
SELECT COL,ROW_NUMBER()OVER(ORDER BY CURRENT_TIMESTAMP)id INTO #temp2 FROM dbo.<span style="color:#ff0000;">f_splitSTR</span>(@YDBH,';')
DECLARE @MAX INT
SELECT @MAX =MAX(id) FROM #temp

CREATE TABLE #tables
(
  YBH varchar(100),
  YLX varchar(100)
)

DECLARE @i INT
SET @i=1
WHILE(@i<=@MAX)
BEGIN
    DECLARE @col VARCHAR(50)
	SELECT @col=col FROM #temp2 WHERE id=@i
	INSERT INTO #tables
	        ( YBH, YLX )VALUES  (left(@col,charindex(',',@col)-1),SUBSTRING(@col,CHARINDEX(',',@col)+1,LEN(@col)))
	SET @i=@i+1
END
<pre name="code" class="sql"> select * from #tables

 
-------结果--------
--02<span style="white-space:pre">	</span>YD002
--03<span style="white-space:pre">	</span>YD004

<pre name="code" class="sql">附:f_splitSTR --写好的表值函数调用
 
ALTER  FUNCTION [dbo].[f_splitSTR](
@s     varchar(8000),  --待分拆的字符串
@split  varchar(10)     --数据分隔符
)RETURNS TABLE
AS
RETURN(
<span style="white-space:pre">	</span>SELECT col=CAST(SUBSTRING(@s,ID,CHARINDEX(@split,@s+@split,ID)-ID) as varchar(100))
<span style="white-space:pre">	</span>FROM tb_splitSTR
<span style="white-space:pre">	</span>WHERE ID<=LEN(@s+'a') 
<span style="white-space:pre">		</span>AND CHARINDEX(@split,@split+@s,ID)=ID)

根据上面就可以得到这个表中的数据了,貌似数据处理有点麻烦了,大神请忽略



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值