Буквально говоря, если вы хотите избежать повторного ввода имен полей, попросите SQL Server выполнить набор за вас.
Select ' Or DataLength(' + Name + ')<>DataLength(RTrim(' + Name + '))'
From sys.Columns
Where Object_ID=Object_ID('Employees')
And System_Type_ID=167
(Обратите внимание, что вам не нужна явная ссылка на sys.tables, функция Object_ID сделает это за вас!)
Тем не менее, я думаю, что вы действительно спрашиваете, как определить, заканчивается ли значение одним или несколькими пробелами, не сравнивая длины таким способом.,Ответ заключается в использовании хранимой функции.
Create Function Dbo.EndsWithSpaces(@Value Varchar(8000)) Returns Bit
As Begin
Return Case When DataLength(@Value)=DataLength(RTrim(@Value)) Then 0
Else 1 End
End
Теперь вы можете проверить наличие пробелов в конце для любого значения: Dbo.EndsWithSpaces(Value)=1
Конечно, вы все равно можете заставить SQL Server сгенерировать конец предложения Where для вас.:
Select ' Or Dbo.EndsWithSpaces(' + Name + ')=1'
From sys.Columns
Where Object_ID=Object_ID('Employees')
And System_Type_ID=167