Согласно Виртуальный Парень ПК сообщение в блоге" Обнаружение виртуальные машины Microsoft ", можно использовать WMI для проверки производителя материнской платы. В PowerShell:
(gwmi Win32_BaseBoard).Manufacturer -eq "Microsoft Corporation"
Указание значения по умолчанию для параметра хранимой процедуры сделает его необязательным.
РЕДАКТИРОВАТЬ:
CREATE PROC [EDURE] [owner. ]
имя_процедуры [; номер]
[{@parameter data_type}
[РАЗЛИЧНЫЕ] [= по умолчанию] [ВЫВОД]
] [, ... n]default
Значение параметра по умолчанию. Если задано значение по умолчанию, процедура может быть выполнен без указания значение для этого параметра. По умолчанию должно быть константой или может иметь значение NULL. Он может включать подстановочные знаки (%, _, [] и [^]), если процедура использует параметр с ключевым словом LIKE.
См. - http://msdn.microsoft.com/en-us/library/aa258259%28SQL. 80% 29.aspx
Когда вы создаете хранимую процедуру, создайте ее следующим образом
Create Proc MyProc
@Param1 VarChar (20),
@Param2 VarChar (20) = NULL
AS
-- Your code here
GO
Param1 является обязательным
Param2 необязательным
Да. Перечислите «необязательные» параметры в конце списка параметров и присвойте им значение по умолчанию (обычно NULL):
CREATE PROCEDURE MyProcedure
@param1 int,
@param2 varchar(200),
@thing_id int = NULL
AS
If @thing_id IS NULL Begin
/* ... */
End
END
Если не считать удовольствия от SQL-инъекций, которое принесет код, да, вы можете. Вы можете установить значение по умолчанию для параметров
CREATE PROCEDURE DoStuff @param1 varchar(20) = null
Затем внутри хранимой процедуры
IF @param1 IS NOT NULL
BEGIN
... Do stuff
END
Вы можете установить любое значение по умолчанию, которое вам нравится.
CREATE PROCEDURE SQL_INJECTION(
@MandatoryA int,
@MandatoryB varchar(50),
@MandatoryC datetime,
@OptionalA varchar(50) = NULL
)
AS
-- PUT YOUR DYNAMIC SQL HERE
GO
Для вызова
EXEC dbo.SQL_INJECTION @MandatoryA = 1, @MandatoryB = 'test', @MandatoryC = '2009-10-05', @OptionalA = DEFAULT
Примечание 1: динамический SQL = SQL-инъекция