我不会潜入为什么你需要在DB的每一列上做它,这似乎很奇怪,但我把它留给你。
这里是你如何做到这一点(你不符合规范约束什么THO)
做一个临时表,每表列从该表中组合
这SQL服务器上进行了测试,调整代码如果你需要其他DBMS。但原理是一样的:
select
o.name as Tab,c.name as Col
into #temp
from sys.columns c
inner join sys.objects o on c.object_id=o.object_id
where type = 'U' -- only user defined
and (t.name = 'varchar' or t.name = 'nvarchar') -- only columns with this datatypes
order by o.name,c.column_id
-- select * from #temp
DECLARE @tab nvarchar(max)
DECLARE @col nvarchar(max)
while ((select count(*) from #temp) > 0)
BEGIN
set @tab = (select top 1 Tab from #temp)
set @col = (select top 1 Col from #temp)
-- add your constraint here
-- select @tab, @col
delete from #temp where Tab = @tab and Col = @col
END
drop table #temp
取消注释注释部分以查看选定的表列值或查看它是如何迭代的。
编辑1:增加了where type = 'U'
从system.objects
得到只有用户定义的。
编辑2:扩展where子句,现在只需要由用户进行的表
只是路过想法...也许'ASCII(右([的ColumnName],1))> 32' VARCHAR和nvarchar列以避免可怕的控制字符,如CRLF –