sqlserver 2014 DEFAULT in VALUES using MERGE
According to MS-DOCS:


Table Value Constructor (Transact-SQL)  



  DEFAULT  
  
  Forces the Database Engine to insert the default value defined for a column. If a default does not exist for the column and
  the column allows null values, NULL is inserted. DEFAULT is not valid
  for an identity column. When specified in a table value constructor,
  DEFAULT is allowed only in an INSERT statement.


You cannot use DEFAULT in a MERGE statement. I suppose it is because it cannot evaluate DEFAULT value for a single TVC.




SELECT * FROM (VALUES(1, 'D')) AS T(A,B);
GO



 A | B 
-: | :-
 1 | D 






SELECT * FROM (VALUES(1, DEFAULT)) AS T(A,B);
GO



Msg 156 Level 15 State 1 Line 1
Incorrect syntax near the keyword 'DEFAULT'.



But, as far as you know DEFAULT values of your table, you could change the word DEFAULT by the actual default value:

MERGE INTO [dbo].[IMOS] [T]
USING 
    (VALUES ('!Default_Materials_1', 0), ('00_NEW',30)) AS [S] ([NAME], [TYP])
ON [T].[NAME] = [S].[NAME]
WHEN MATCHED THEN
UPDATE SET [TYP]=[S].[TYP]
WHEN NOT MATCHED THEN
INSERT ([NAME], [TYP]) VALUES ([NAME], [TYP]);


Example:

CREATE TABLE TBL
(
    ID INT IDENTITY PRIMARY KEY,
    FOO INT DEFAULT 0,
    BAR VARCHAR(10) DEFAULT 'X'   --&lt; DEFAULT value for BAR
);
GO

INSERT INTO TBL VALUES (1, 'A'), (2, 'B'), (3, 'C');
GO


Now replace DEFAULT by 'X':

MERGE INTO TBL
USING (VALUES (1, 'X')) AS T(A,B)
ON T.A = TBL.FOO
WHEN MATCHED THEN 
UPDATE 
    SET BAR = B
WHEN NOT MATCHED THEN
INSERT (FOO, BAR) VALUES (T.A, T.B);





SELECT * FROM TBL;
GO



ID | FOO | BAR
-: | --: | :--
 1 |   1 | X  
 2 |   2 | B  
 3 |   3 | C  



db&lt;>fiddle here

In HugSQL:

MERGE INTO TBL
USING (VALUES (?, 'X')) AS T(A,B)
ON T.A = TBL.FOO
WHEN MATCHED THEN 
UPDATE 
    SET BAR = B
WHEN NOT MATCHED THEN
INSERT (FOO, BAR) VALUES (T.A, T.B);


Using a TYPE

On SQL-Server 2014 you could use a TYPE (alias data type).

CREATE TABLE dbo.MyTest 
(
    Id int primary key, 
    Val char(3) DEFAULT 'aaa'
);

INSERT INTO dbo.MyTest VALUES (1,'V1'),(2,'V2'),(10,'V10'),(11,'V11');

CREATE TYPE dbo.Mytype AS 
TABLE 
(
    Id  int PRIMARY KEY,
    Bar char(3) DEFAULT 'aaa'
);


Obviously table and type schema must be the same.

DECLARE @myData Mytype;

INSERT INTO @myData(Id, Bar) VALUES (1, DEFAULT),(3, 'V3')

MERGE INTO dbo.MyTest
USING (SELECT Id, Bar FROM @myData) src
ON MyTest.Id = src.Id
WHEN MATCHED THEN 
UPDATE SET Val = src.Bar
WHEN NOT MATCHED THEN
INSERT (Id, Val) VALUES (src.Id, src.Bar);





SELECT * FROM MyTest;
GO



Id | Val
-: | :--
 1 | aaa
 2 | V2 
 3 | V3 
10 | V10
11 | V11



db&lt;>fiddle here