При работе с динамическими строками сначала выберите их, чтобы вы могли проверить работоспособность полученного синтаксиса.
Вам нужны одинарные кавычки в результате, поэтому вам нужно больше, чем одиночные кавычки, в коде:
declare @DriversLicensePrefix nchar(8) = 'A2345678'
declare @DriversLicenseSuffix nchar(10) = 'abcdefghij'
DECLARE @sqlInsertDriversLicense nvarchar(max)
SET @sqlInsertDriversLicense = 'INSERT INTO [dbo].[tDriversLicense] (DriversLicensePrefix, DriversLicenseSuffix, DateAdded, DriversLicenseNumber)
VALUES (N''' + @DriversLicensePrefix + ''', N''' + @DriversLicenseSuffix + ''', ''' + convert(char(8),GETDATE(),112) + ''', ''GPC4859'');'
select @sqlInsertDriversLicense
+-------------------------------------------------------------------------------------------------------------------+
| result: |
+-------------------------------------------------------------------------------------------------------------------+
| INSERT INTO [dbo].[tDriversLicense] (DriversLicensePrefix, DriversLicenseSuffix, DateAdded, DriversLicenseNumber) |
| VALUES (N'A2345678', N'abcdefghij', '20181109', 'GPC4859'); |
+-------------------------------------------------------------------------------------------------------------------+
NB Вы должны использовать convert(char(8),getdate(),112)
SQL Server распознает формат ГГГГММДД в качестве значения даты независимо от настроек сервера по умолчанию.
Результат, приведенный выше, демонстрирует, какой оператор вставки ДОЛЖЕН быть, обратите внимание, что он содержит несколько одинарных кавычек.
Когда вы объединяете оператор SQL, вы также имеете дело со строками, и каждая их часть должна быть заключена в одинарные кавычки.
Таким образом, для одинарных кавычек существует множество потребностей.
А; Таким образом, вам нужно несколько одинарных кавычек на протяжении всей конкатенации, некоторые из которых помогут сформировать оператор SQL, а другие - ВНУТРИ этого оператора.
/* get this into @sql */
select 'Y' as col1;
declare @SQL as nvarchar(max)
set @SQL = N'select ''Y'' as col1;'
select @SQL;
+---------------------+
| @SQL |
+---------------------+
| select 'Y' as col1; |
+---------------------+
В большем запросе 2 переменные определены как NCHAR (8) или (10), так как вы определили их как N char, тогда при вставке данных в них вы должны префиксировать этот ввод как N