powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Убрать "мусор"
15 сообщений из 15, страница 1 из 1
Убрать "мусор"
    #40110710
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дано:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
use tempdb

create table #test ([Name] nvarchar(10))

INSERT #TEST VALUES(N'Молоко')
INSERT #TEST VALUES(N'Сметана')
INSERT #TEST VALUES(N' ')
INSERT #TEST VALUES(N'Гвозди')
INSERT #TEST VALUES(N'Машины')

select cast([Name] as nvarchar) from #test FOR XML PATH('') 

drop table #test



авторРезультат

МолокоСметана & # x 2 0 ; ГвоздиМашины


Вопрос: как бы при конвертации в строку избавиться от & # x 2 0 ; (разделено пробелами), что бы "печатался" пробел?
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40110737
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
replace сверху пустить
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40110793
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist,

Код: sql
1.
select cast([Name] as nvarchar)+',' from #test FOR XML PATH('') 
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40110805
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
PaulWist,

Код: sql
1.
select cast([Name] as nvarchar)+',' from #test FOR XML PATH('') 



Ммм, запятые не нужны, потом их как выковыривать из конечной строки, как отличить "свою запятую" от "родной, что уже была" :)

PS мысль я понял, что нужен "вменяемый" разделитель/символ, которого нет в исходной строке - не вариант, придётся клеить динамику.
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40110813
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist
Владислав Колосов
PaulWist,

Код: sql
1.
select cast([Name] as nvarchar)+',' from #test FOR XML PATH('') 



Ммм, запятые не нужны, потом их как выковыривать из конечной строки, как отличить "свою запятую" от "родной, что уже была" :)

PS мысль я понял, что нужен "вменяемый" разделитель/символ, которого нет в исходной строке - не вариант, придётся клеить динамику.



Код: sql
1.
select (select cast([Name] as nvarchar) from #test FOR XML PATH(''), type ).value('.', 'nvarchar(max)')
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40110815
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist,

а для чего такие сложности, чтобы склеить строки?
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40110818
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist
Вопрос: как бы при конвертации в строку избавиться от & # x 2 0 ; (разделено пробелами), что бы "печатался" пробел?
Код: sql
1.
2.
3.
4.
select
 t.x.value('.', 'varchar(max)')
from
 (select cast([Name] as nvarchar) from #test FOR XML PATH(''), type) t(x);
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40110936
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 invm, aleks222 , Браво!!! (с меня очередное пиво)

Малёк поправил код (изменил select cast ([Name] as nvarchar) на select [Name]), что бы избавиться от 3-х Warnings CONVERT_IMPLICIT

Код: sql
1.
2.
3.
4.
select
 t.x.value('.', 'nvarchar(max)')
from
 (select [Name] from #test FOR XML PATH(''), type) t(x);



тем не менее ещё осталось 2 Warnings

Код: plsql
1.
2.
             <PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT_IMPLICIT(nvarchar(max),[Expr1027],0)" />
              <PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT_IMPLICIT(nvarchar(max),[Expr1026],0)" />



Вопрос: как бы от них избавиться?

План не пристёгивается, странно, под спойлером.

<?xml version="1.0" encoding="utf-16"?>
<ShowPlanXML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Version="1.518" Build="13.0.5888.11" xmlns="http://schemas.microsoft.com/sqlserver/2004/07/showplan">
<BatchSequence>
<Batch>
<Statements>
<StmtSimple StatementCompId="2" StatementEstRows="1" StatementId="1" StatementOptmLevel="FULL" CardinalityEstimationModelVersion="130" StatementSubTreeCost="1.07997" StatementText="select
t.x.value('.', 'nvarchar(max)')
from
(select [Name] from #test FOR XML PATH(''), type) t(x)" StatementType="SELECT" QueryHash="0x2C8D7B3CA978705D" QueryPlanHash="0x1B114A7BA88935AF" RetrievedFromCache="true" SecurityPolicyApplied="false">
<StatementSetOptions ANSI_NULLS="true" ANSI_PADDING="true" ANSI_WARNINGS="true" ARITHABORT="true" CONCAT_NULL_YIELDS_NULL="true" NUMERIC_ROUNDABORT="false" QUOTED_IDENTIFIER="true" />
<QueryPlan DegreeOfParallelism="1" CachedPlanSize="32" CompileTime="3" CompileCPU="3" CompileMemory="544">
<Warnings>
<PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT_IMPLICIT(nvarchar(max),[Expr1027],0)" />
<PlanAffectingConvert ConvertIssue="Cardinality Estimate" Expression="CONVERT_IMPLICIT(nvarchar(max),[Expr1026],0)" />
</Warnings>
<MemoryGrantInfo SerialRequiredMemory="0" SerialDesiredMemory="0" />
<OptimizerHardwareDependentProperties EstimatedAvailableMemoryGrant="65536" EstimatedPagesCached="65536" EstimatedAvailableDegreeOfParallelism="8" MaxCompileMemory="6854936" />
<RelOp AvgRowSize="4035" EstimateCPU="1E-07" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Compute Scalar" NodeId="0" Parallel="false" PhysicalOp="Compute Scalar" EstimatedTotalSubtreeCost="1.07997">
<OutputList>
<ColumnReference Column="Expr1030" />
</OutputList>
<ComputeScalar>
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1030" />
<ScalarOperator ScalarString="[Expr1029]">
<Identifier>
<ColumnReference Column="Expr1029" />
</Identifier>
</ScalarOperator>
</DefinedValue>
</DefinedValues>
<RelOp AvgRowSize="4035" EstimateCPU="4.18E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Inner Join" NodeId="1" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="1.07997">
<OutputList>
<ColumnReference Column="Expr1029" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" />
</RunTimeInformation>
<NestedLoops Optimized="false">
<OuterReferences>
<ColumnReference Column="Expr1003" />
</OuterReferences>
<RelOp AvgRowSize="4035" EstimateCPU="1E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="UDX" NodeId="2" Parallel="false" PhysicalOp="UDX" EstimatedTotalSubtreeCost="0.0032885">
<OutputList>
<ColumnReference Column="Expr1003" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" />
</RunTimeInformation>
<Extension UDXName="FOR XML">
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1003" />
</DefinedValue>
</DefinedValues>
<UsedUDXColumns>
<ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#test]" Column="Name" />
</UsedUDXColumns>
<RelOp AvgRowSize="21" EstimateCPU="0.0001625" EstimateIO="0.003125" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="5" LogicalOp="Table Scan" NodeId="3" Parallel="false" PhysicalOp="Table Scan" EstimatedTotalSubtreeCost="0.0032875" TableCardinality="5">
<OutputList>
<ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#test]" Column="Name" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="5" ActualRowsRead="5" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" ActualScans="1" ActualLogicalReads="1" ActualPhysicalReads="0" ActualReadAheads="0" ActualLobLogicalReads="0" ActualLobPhysicalReads="0" ActualLobReadAheads="0" />
</RunTimeInformation>
<TableScan Ordered="false" ForcedIndex="false" ForceScan="false" NoExpandHint="false" Storage="RowStore">
<DefinedValues>
<DefinedValue>
<ColumnReference Database="[tempdb]" Schema="[dbo]" Table="[#test]" Column="Name" />
</DefinedValue>
</DefinedValues>
<Object Database="[tempdb]" Schema="[dbo]" Table="[#test]" IndexKind="Heap" Storage="RowStore" />
</TableScan>
</RelOp>
</Extension>
</RelOp>
<RelOp AvgRowSize="4035" EstimateCPU="0.0014405" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Aggregate" NodeId="4" Parallel="false" PhysicalOp="Stream Aggregate" EstimatedTotalSubtreeCost="1.07668">
<OutputList>
<ColumnReference Column="Expr1029" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="0" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" />
</RunTimeInformation>
<StreamAggregate>
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1029" />
<ScalarOperator ScalarString="MIN(CASE WHEN [Expr1003] IS NULL THEN NULL ELSE CASE WHEN datalength([Expr1026])>=(128) THEN CONVERT_IMPLICIT(nvarchar(max),[Expr1027],0) ELSE CONVERT_IMPLICIT(nvarchar(max),[Expr1026],0) END END)">
<Aggregate AggType="MIN" Distinct="false">
<ScalarOperator>
<IF>
<Condition>
<ScalarOperator>
<Compare CompareOp="IS">
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1003" />
</Identifier>
</ScalarOperator>
<ScalarOperator>
<Const ConstValue="NULL" />
</ScalarOperator>
</Compare>
</ScalarOperator>
</Condition>
<Then>
<ScalarOperator>
<Const ConstValue="NULL" />
</ScalarOperator>
</Then>
<Else>
<ScalarOperator>
<IF>
<Condition>
<ScalarOperator>
<Compare CompareOp="GE">
<ScalarOperator>
<Intrinsic FunctionName="datalength">
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1026" />
</Identifier>
</ScalarOperator>
</Intrinsic>
</ScalarOperator>
<ScalarOperator>
<Const ConstValue="(128)" />
</ScalarOperator>
</Compare>
</ScalarOperator>
</Condition>
<Then>
<ScalarOperator>
<Convert DataType="nvarchar(max)" Length="2147483647" Style="0" Implicit="true">
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1027" />
</Identifier>
</ScalarOperator>
</Convert>
</ScalarOperator>
</Then>
<Else>
<ScalarOperator>
<Convert DataType="nvarchar(max)" Length="2147483647" Style="0" Implicit="true">
<ScalarOperator>
<Identifier>
<ColumnReference Column="Expr1026" />
</Identifier>
</ScalarOperator>
</Convert>
</ScalarOperator>
</Else>
</IF>
</ScalarOperator>
</Else>
</IF>
</ScalarOperator>
</Aggregate>
</ScalarOperator>
</DefinedValue>
</DefinedValues>
<RelOp AvgRowSize="8045" EstimateCPU="0.0024" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="2400" LogicalOp="UDX" NodeId="5" Parallel="false" PhysicalOp="UDX" EstimatedTotalSubtreeCost="1.07524">
<OutputList>
<ColumnReference Column="Expr1026" />
<ColumnReference Column="Expr1027" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" />
</RunTimeInformation>
<Extension UDXName="XQUERY DATA">
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1024" />
</DefinedValue>
<DefinedValue>
<ColumnReference Column="Expr1025" />
</DefinedValue>
<DefinedValue>
<ColumnReference Column="Expr1026" />
</DefinedValue>
<DefinedValue>
<ColumnReference Column="Expr1027" />
</DefinedValue>
<DefinedValue>
<ColumnReference Column="Expr1028" />
</DefinedValue>
</DefinedValues>
<UsedUDXColumns>
<ColumnReference Table="[XML Reader]" Column="id" />
<ColumnReference Table="[XML Reader]" Column="nid" />
<ColumnReference Table="[XML Reader]" Column="tid" />
<ColumnReference Table="[XML Reader]" Column="value" />
<ColumnReference Table="[XML Reader]" Column="lvalue" />
<ColumnReference Table="[XML Reader]" Column="lvaluebin" />
<ColumnReference Column="Expr1020" />
<ColumnReference Table="[XML Reader]" Column="id" />
</UsedUDXColumns>
<RelOp AvgRowSize="12983" EstimateCPU="0.0003" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="3000" LogicalOp="Compute Scalar" NodeId="6" Parallel="false" PhysicalOp="Compute Scalar" EstimatedTotalSubtreeCost="1.07284">
<OutputList>
<ColumnReference Column="Expr1020" />
<ColumnReference Table="[XML Reader]" Column="id" />
<ColumnReference Table="[XML Reader]" Column="nid" />
<ColumnReference Table="[XML Reader]" Column="tid" />
<ColumnReference Table="[XML Reader]" Column="value" />
<ColumnReference Table="[XML Reader]" Column="lvalue" />
<ColumnReference Table="[XML Reader]" Column="lvaluebin" />
</OutputList>
<ComputeScalar>
<DefinedValues>
<DefinedValue>
<ColumnReference Column="Expr1020" />
<ScalarOperator ScalarString="0x58">
<Const ConstValue="0x58" />
</ScalarOperator>
</DefinedValue>
</DefinedValues>
<RelOp AvgRowSize="12531" EstimateCPU="0.01254" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="3000" LogicalOp="Inner Join" NodeId="7" Parallel="false" PhysicalOp="Nested Loops" EstimatedTotalSubtreeCost="1.07254">
<OutputList>
<ColumnReference Table="[XML Reader]" Column="id" />
<ColumnReference Table="[XML Reader]" Column="nid" />
<ColumnReference Table="[XML Reader]" Column="tid" />
<ColumnReference Table="[XML Reader]" Column="value" />
<ColumnReference Table="[XML Reader]" Column="lvalue" />
<ColumnReference Table="[XML Reader]" Column="lvaluebin" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="11" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" />
</RunTimeInformation>
<NestedLoops Optimized="false">
<OuterReferences>
<ColumnReference Column="Expr1004" />
</OuterReferences>
<RelOp AvgRowSize="461" EstimateCPU="1.157E-06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="1" LogicalOp="Constant Scan" NodeId="8" Parallel="false" PhysicalOp="Constant Scan" EstimatedTotalSubtreeCost="1.157E-06">
<OutputList>
<ColumnReference Column="Expr1004" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRows="1" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" />
</RunTimeInformation>
<ConstantScan>
<Values>
<Row>
<ScalarOperator ScalarString="0x">
<Const ConstValue="0x" />
</ScalarOperator>
</Row>
</Values>
</ConstantScan>
</RelOp>
<RelOp AvgRowSize="12531" EstimateCPU="1.06" EstimateIO="0" EstimateRebinds="0" EstimateRewinds="0" EstimatedExecutionMode="Row" EstimateRows="3000" LogicalOp="Table-valued function" NodeId="9" Parallel="false" PhysicalOp="Table-valued function" EstimatedTotalSubtreeCost="1.06">
<OutputList>
<ColumnReference Table="[XML Reader]" Column="id" />
<ColumnReference Table="[XML Reader]" Column="nid" />
<ColumnReference Table="[XML Reader]" Column="tid" />
<ColumnReference Table="[XML Reader]" Column="value" />
<ColumnReference Table="[XML Reader]" Column="lvalue" />
<ColumnReference Table="[XML Reader]" Column="lvaluebin" />
</OutputList>
<RunTimeInformation>
<RunTimeCountersPerThread Thread="0" ActualRebinds="1" ActualRewinds="0" ActualRows="11" Batches="0" ActualEndOfScans="1" ActualExecutions="1" ActualExecutionMode="Row" ActualElapsedms="0" ActualCPUms="0" />
</RunTimeInformation>
<TableValuedFunction>
<DefinedValues>
<DefinedValue>
<ColumnReference Table="[XML Reader]" Column="id" />
</DefinedValue>
<DefinedValue>
<ColumnReference Table="[XML Reader]" Column="nid" />
</DefinedValue>
<DefinedValue>
<ColumnReference Table="[XML Reader]" Column="tid" />
</DefinedValue>
<DefinedValue>
<ColumnReference Table="[XML Reader]" Column="value" />
</DefinedValue>
<DefinedValue>
<ColumnReference Table="[XML Reader]" Column="lvalue" />
</DefinedValue>
<DefinedValue>
<ColumnReference Table="[XML Reader]" Column="lvaluebin" />
</DefinedValue>
</DefinedValues>
<Object Table="[XML Reader]" />
<ParameterList>
<ScalarOperator ScalarString="[Expr1003]">
<Identifier>
<ColumnReference Column="Expr1003" />
</Identifier>
</ScalarOperator>
<ScalarOperator ScalarString="(3)">
<Const ConstValue="(3)" />
</ScalarOperator>
<ScalarOperator ScalarString="[Expr1004]">
<Identifier>
<ColumnReference Column="Expr1004" />
</Identifier>
</ScalarOperator>
<ScalarOperator ScalarString="NULL">
<Const ConstValue="NULL" />
</ScalarOperator>
</ParameterList>
</TableValuedFunction>
</RelOp>
</NestedLoops>
</RelOp>
</ComputeScalar>
</RelOp>
</Extension>
</RelOp>
</StreamAggregate>
</RelOp>
</NestedLoops>
</RelOp>
</ComputeScalar>
</RelOp>
</QueryPlan>
</StmtSimple>
</Statements>
</Batch>
</BatchSequence>
</ShowPlanXML>


Владислав Колосова для чего такие сложности, чтобы склеить строки?

Да.

авторMicrosoft SQL Server 2016 (SP2-CU17) (KB5001092) - 13.0.5888.11 (X64) Mar 19 2021 19:41:38
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40110994
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist,

"агрегатная CLR функция для сбора колонки в строку с разделителями"
Вдруг пригодится.


/*
-- агрегатная CLR функция для сбора колонки в строку с разделителями
create table #tt1(id int, nn varchar(10))
insert #tt1 values (1, 'qwe'),(1,'qwe'),(1,'dsa'),(2,'zxc'),(3,'tre'),(3,'tre1')
select id, dbo.ConcatColumn(nn,' + ') from (select distinct * from #tt1) tt1 group by id
*/
using System;
using Microsoft.SqlServer.Server;
using System.Data.SqlTypes;
using System.IO;
using System.Text;

[Serializable]
[SqlUserDefinedAggregate(
Format.UserDefined, //use clr serialization to serialize the intermediate result
IsInvariantToNulls = true, //optimizer property
IsInvariantToDuplicates = false, //optimizer property
IsInvariantToOrder = false, //optimizer property
MaxByteSize = 8000) //maximum size in bytes of persisted value
]
public class ConcatColumn : IBinarySerialize
{
/// <summary>
/// The variable that holds the intermediate result of the concatenation
/// </summary>
private StringBuilder intermediateResult;
private string _delimiter;

/// <summary>
/// Initialize the internal data structures
/// </summary>
public void Init()
{
_delimiter = string.Empty;
intermediateResult = new StringBuilder();
}

/// <summary>
/// Accumulate the next value, not if the value is null
/// </summary>
/// <param name="Value"></param>
public void Accumulate(SqlString Value, SqlString Delimiter)
{
if (Value.IsNull)
{
return;
}

intermediateResult.Append(Value.Value);

if (!Delimiter.IsNull & Delimiter.Value.Length > 0)
{
_delimiter = Delimiter.Value; /// save for Merge
if (intermediateResult.Length > 0) intermediateResult.Append(Delimiter.Value);
}
}

/// <summary>
/// Merge the partially computed aggregate with this aggregate.
/// </summary>
/// <param name="other"></param>
public void Merge(ConcatColumn other)
{
if (intermediateResult.Length > 0 & other.intermediateResult.Length > 0)
intermediateResult.Append(_delimiter);

intermediateResult.Append(other.intermediateResult);
}

/// <summary>
/// Called at the end of aggregation, to return the results of the aggregation.
/// </summary>
/// <returns></returns>
public SqlString Terminate()
{
string output = string.Empty;

//delete the trailing comma, if any
if (intermediateResult != null
&& intermediateResult.Length > 0)
{
output = intermediateResult.ToString(0, intermediateResult.Length - _delimiter.Length);
}

return new SqlString(output);
}

public void Read(BinaryReader r)
{
_delimiter = r.ReadString();
intermediateResult = new StringBuilder(r.ReadString());
}

public void Write(BinaryWriter w)
{
w.Write(_delimiter);
w.Write(this.intermediateResult.ToString());
}
}
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40111006
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов
PaulWist,
"агрегатная CLR функция для сбора колонки в строку с разделителями"
Вдруг пригодится.

Если есть выбор: "встроенная или CLR" - от CLR следует шарахаться как чорт от ладана.
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40111010
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так может пустая не нужна совсем, тогда еще проще
Код: sql
1.
select cast(nullif([Name], '') as nvarchar) from #test FOR XML PATH('') 
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40111080
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Владислав Колосов
PaulWist,
"агрегатная CLR функция для сбора колонки в строку с разделителями"
Вдруг пригодится.

Если есть выбор: "встроенная или CLR" - от CLR следует шарахаться как чорт от ладана.


Надо было еще палец к небу поднять.
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40111118
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор"агрегатная CLR функция для сбора колонки в строку с разделителями"Шта ? Можно же сделать обычную скалярную sql-функцию.
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40111125
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Шта ? Можно же сделать обычную скалярную sql-функцию.

Вы разницу между скалярной и агрегатной функцией знаете?
...
Рейтинг: 0 / 0
Убрать "мусор"
    #40111200
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
автор"агрегатная CLR функция для сбора колонки в строку с разделителями"
Шта ? Можно же сделать обычную скалярную sql-функцию.

Именно так поступило предыдущие "поколение кодо-писателей", а теперь оказалось, что ночь не такая уж долгая
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Убрать "мусор"
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]