Вероятно, не большая часть производительности дружественный путь, но Вы могли создать скалярную функцию, которая вытягивает из информационной схемы с именем таблицы и именем столбца, и затем назовите то использование isnull логики, которую Вы попробовали ранее:
CREATE FUNCTION GetDefaultValue
(
@TableName VARCHAR(200),
@ColumnName VARCHAR(200)
)
RETURNS VARCHAR(200)
AS
BEGIN
-- you'd probably want to have different functions for different data types if
-- you go this route
RETURN (SELECT TOP 1 REPLACE(REPLACE(REPLACE(COLUMN_DEFAULT, '(', ''), ')', ''), '''', '')
FROM information_schema.columns
WHERE table_name = @TableName AND column_name = @ColumnName)
END
GO
И затем называют его как это:
INSERT INTO t (value) VALUES ( ISNULL(@value, SELECT dbo.GetDefaultValue('t', 'value') )
Функциональной разницы нет. В интерфейсе java никогда не предоставляется никакой реализации, поэтому все объявления методов неявно абстрактны.
См. [1]: http://java.sun.com/docs/books/tutorial/java/IandI/abstract. html
Прямая цитата из приведенного выше:
Примечание. Все методы в интерфейсе (см. раздел «Интерфейсы») неявно абстрактны, поэтому модификатор abstract не используется с методами интерфейса (это может быть - это просто не обязательно).
Interface methods are both public
and abstract
by default. There's no difference between foo()
and bar()
and you can safely remove all public
and abstract
keywords.
Вы ничего не упускаете. Из Спецификации языка Java :
Объявление каждого метода в теле интерфейса неявно абстрактный, поэтому его тело всегда представлены точкой с запятой, а не блок.
Каждое объявление метода в теле интерфейса неявно является общедоступным.
Другими словами, вы можете опустить общедоступный
, а также реферат
по методам интерфейса.
Это избыточно (нет разницы между двумя объявлениями) и явно не рекомендуется в разделе 9.4 спецификации языка Java:
Для совместимости со старыми версиями платформы Java разрешено но разочарованный, как вопрос стиля, для избыточного указания аннотации модификатор для методов, объявленных в
И public
также не нужны и не рекомендуются:
Разрешено, но настоятельно не рекомендуется из соображений стиля, избыточно указывать модификатор public для методов интерфейса.
Я не знаю, почему public
категорически не рекомендуется, а abstract
просто не рекомендуется ...
Both accomplish the same, since all methods in an interface are abstract.
abstract
in this scenario is unnecessary (as is marking methods in interfaces as public
).
You would instead use this on a method in an abstract class in order to enforce its overriding by a subclass.
There no are difference between declarations. Conceptually, all methods in an interface are abstract.
Без разницы. Все методы в интерфейсе java всегда абстрактны.
См. Первое примечание по этой ссылке: http://java.sun.com/docs/books/tutorial/java/IandI/abstract.html
И foo (), и bar () являются абстрактными, поскольку они объявлены внутри интерфейса. Абстрактное слово, которое вы здесь использовали, не имеет значения - лучше удалите его.
Интерфейсы в java "каким-то образом" равны полностью абстрактным классам, поэтому добавление ключевого слова abstract к объявлению метода в интерфейсе не имеет ничего общего с методом!