3

クエリを作成しました (これはそのクエリの最も単純な形式です)

declare @tbl1 table(name varchar(50))
declare @tbl2 table(name varchar(50))
declare @query varchar(600)
set @query = ''

insert into @tbl1
select 'a' union select 'b'  union select 'c'  union select 'd'  union select 'e'

insert into @tbl2
select '1' union select '2'  union select '3'  union select '4'  union select '5'

select 
 @query = 
 ' Go ' + 
 @query +
 tbl1.name + ' (' +
 substring(
 (
    select ', ' + tbl2.name
    from @tbl2 as tbl2
    for xml path('')
 ), 3, 5000) + ') '
from @tbl1 as tbl1

print @query

こんな結果になると思ってた

 GO a (1, 2, 3, 4, 5) GO  b (1, 2, 3, 4, 5)  GO c (1, 2, 3, 4, 5)  GO d (1, 2, 3, 4, 5)  GO e (1, 2, 3, 4, 5) 

しかし、この平均的なクエリは私にこれを返します

 Go  Go  Go  Go  Go a (1, 2, 3, 4, 5) b (1, 2, 3, 4, 5) c (1, 2, 3, 4, 5) d (1, 2, 3, 4, 5) e (1, 2, 3, 4, 5) 

誰かがこの結果を私に説明してくれませんか?私はこれを理解できません。

4

2 に答える 2

3

文字列のクエリ部分の詳細を無視すると、次のようになります。

@query = ' Go ' + @query + 't(...) '

最初から空で@queryあるため、最初の反復は次のとおりです。

@query = ' Go ' + '' + 't(...) '

です' Go t(...) '。次の反復は次のようになります。

@query = ' Go ' + ' Go t(...) ' + 't(...)'

として終了します' Go Go t(...) t(...) '

ご覧のとおり、Goが文字列の最初に追加され、クエリが最後に追加されるためGo、文字列の先頭に all が配置されます。

于 2013-02-28T07:16:32.633 に答える