想象一下下面的模式:意外的字符串连接结果
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