我有兩個變量,如:檢索從單一的SQL Server可變數據的多條
@FieldName
@values
這兩個變量保存值,如:
@FieldName
- 包含[a],[b],[c],[d]
@values
- 包含5,6,7,8
現在我只需要檢索'b'
& 'd'
列的數據。
我們怎樣得到b=6 & d=8
?
在此先感謝。
我有兩個變量,如:檢索從單一的SQL Server可變數據的多條
@FieldName
@values
這兩個變量保存值,如:
@FieldName
- 包含[a],[b],[c],[d]
@values
- 包含5,6,7,8
現在我只需要檢索'b'
& 'd'
列的數據。
我們怎樣得到b=6 & d=8
?
在此先感謝。
好,我討厭做的SQL Server這樣的事情,但
declare @FieldName nvarchar(max) = '[a],[b],[c],[d]'
declare @values nvarchar(max) = '5,6,7,8'
declare @i int, @j int, @break int
declare @a nvarchar(max), @b nvarchar(max), @result nvarchar(max)
select @break = 0
while @break = 0
begin
select @i = charindex(',', @FieldName), @j = charindex(',', @values)
if @i > 0 and @j > 0
begin
select @a = left(@FieldName, @i - 1), @b = left(@values, @j - 1)
select @FieldName = right(@FieldName, len(@FieldName) - @i), @values = right(@values, len(@values) - @j)
end
else
begin
select @a = @FieldName, @b = @values, @break = 1
end
if @a in ('[b]', '[d]')
select @result = isnull(@result + ' & ', '') + @a + '=' + @b
末
select @result
你也可以把所有該列表分爲臨時/變量表和做加盟。
select *
from
(
select T.<yourcolumn>, row_number() over (order by T.<yourcolumn>) as rownum
from <temptable1> as T
) as F
inner join
(
select T.<yourcolumn>, row_number() over (order by T.<yourcolumn>) as rownum
from <temptable2> as T
) as V on V.rownum = F.rownum
,或者甚至更好,你可以傳遞參數到SP的XML格式,而不是在不同的名單
非常感謝bro.its正常工作 – riad
試試這個:
使用XML我正在試圖灑的價值和存儲結果在表變量
DECLARE @FieldName VARCHAR(MAX),
@values varchar(max)
SET @FieldName = 'a,b,c,d';
SET @values = '5,6,7,8'
SET @FieldName = @FieldName + ',';
SET @values = @values + ',';
DECLARE @X XML
SET @X = CAST('<Item>' + REPLACE(@FieldName, ',', '</Item><Item>') + '</Item>' AS XML)
Declare @X1 XML
Set @X1=CAST('<Position>' + REPLACE(@values, ',', '</Position><Position>') + '</Position>' AS XML)
Declare @FieldSample table
(
FieldName char(1),
rowNum int
)
Declare @valueSample table
(position int,
rowNum int)
Insert into @FieldSample(rowNum,FieldName)
Select * from (
SELECT row_number() over (order by (select 0)) as rowNum, t.value('.', 'char(1)') as field
FROM @x.nodes('/Item') as x(t)
) as a
where a.field !=''
Insert into @valueSample(rowNum,position)
Select * from (
Select row_number() over (order by (select 0)) as rowNum, k.value('.', 'int') as position
from @X1.nodes('/Position') as x1(k)
) as b
where b.position !=0
基本上最後的邏輯,您可以在根據您打算如何獲取數據變更
Select a.FieldName,b.position from @FieldSample as a
inner join @valueSample as b
on a.rowNum=b.rowNum
where b.position = 6 or b.position =8
不錯的解決方案.. – riad
您是否在其他地方形成這些變量的值並將它們傳遞給此存儲過程? – Vikdor
基本上,從一個長存儲過程使用select命令我得到這些值。現在需要拆分字段和值。我不會將該參數傳遞給任何地方。只需使用它創建INSERT/UPDATE命令 – riad
如果您使用的是SQL Server 2005或更高版本,我推薦使用XML來保存這些值,這樣可以更輕鬆地直接生成結果集插入/更新到表格中。 – Vikdor