在网上找了一些例子感觉并不是很理想
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)
根据上面就可以得到这个表中的数据了,貌似数据处理有点麻烦了,大神请忽略