想象一下下面的模式:意外的字符串連接結果
create table tempdb..t1 (id int, name sysname);
create table tempdb..t2 (id int, name sysname);
create index IX1 on tempdb..t1 (id);
create index IX2 on tempdb..t2 (id);
現在我試圖腳本索引定義:
declare @stmt nvarchar(max) = '';
select @stmt += 'create index ' + ix.name + ' on ' + t.name
+ isnull(' where ' + ix.filter_definition, '') + char(13)
from tempdb.sys.tables t
join tempdb.sys.indexes ix on t.object_id = ix.object_id
where ix.type > 0 and t.name in ('t1','t2')
order by ix.name;
print @stmt;
我期待得到兩下指數的定義:
create index IX1 on t1
create index IX2 on t2
但只獲得第二。如果我刪除order by
或isnull
部分,或者添加top
語句,我會得到兩個定義。
我錯過了一些明顯的東西嗎?
這種連接方式不能保證能正常工作。參見[nvarchar的級聯/指數/爲nvarchar(最大)無法解釋的行爲]的可能重複(http://stackoverflow.com/questions/15138593/nvarchar-concatenation-index-nvarcharmax-inexplicable-behavior) – 2013-04-04 12:29:11