2016-03-22 7 views
0

У меня есть вопрос о динамической вставки SQL хранимую процедуру, потому что мне нужно вставить неизвестное количество (динамически),Динамическая вставка SQL хранимая процедура

ниже, как написано:

@Parameter as nvarchar(Max), 
@SQLQuery as nvarchar(Max) 

SET @SQLQuery = 'insert into <table> 
(FieldOne,FieldTwo,FieldThree,GeneratedId,dateAdded,addedBy) 
values '[email protected] 
EXEC sp_executesql @SQLQuery 

Когда я попытаться выполнить эту хранимую процедуру, используя следующие значения:

@Parameter = (1,0,0,12345678123,"2016-03-22 23:26:25",123) 
@SQLQuery = null 

Я даже пытался (по глупым причинам) попробовать следующие значения:

@Parameter = (1,0,0,12345678123,2016-03-22 23:26:25,123) 
@SQLQuery = null 

Я получаю ошибку ниже от SQL Server

Msg 102, Level 15, State 1, Line 3 Неправильный синтаксис около '23'.

(1 ряд (ы) пострадавших)

Но ни одной строки фактически добавляются.

В таблице я использую, как показано ниже:

ID   (PK and autoincrement) 
FieldOne: tinyint 
FieldTwo: tinyint 
FieldThree: tinyint 
GeneratedId: nvarchar(50) 
dateAdded: datetime 
addedBy:  int 

Я не могу понять, что я делаю неправильно,

Спасибо всем заранее за ваше время и помощь.

+0

Что вы подразумеваете под «Мне нужно вставить неизвестную сумму»? Неизвестное количество столбцов? –

+0

'@Parameter = (1,0,0,12345678123, '' 2016-03-22 23: 26: 2 '', 123)' Использовать двойные одинарные кавычки –

+0

Да, В какой-то момент мне может понадобиться (1,0, 0,12345678123, «2016-03-22 23:26:25», 123). В другой раз, когда мне понадобится (1,0,0,12345678123, «2016-03-22 23:26:25», 123), (1,0,0,12345678124, «2016-03-22 23:26:26», 123) –

ответ

0

Ваша переменная date должна быть заключена в одинарные кавычки, а не в два раза. Попробуйте это, и он должен работать.

НО .....

Если вы особенно хотите пойти по этому (необычной) дороге, я настоятельно рекомендую использовать параметризованные поддержку запроса в sp_executesql - это даст вам более эффективное и, как правило более безопасный запрос.

Обратитесь к https://msdn.microsoft.com/en-us/library/ms188001.aspx за дополнительной информацией о том, как использовать sp_ExecuteSQL для параметризованных запросов.

0

Если вам нужны двойные кавычки, убедитесь, что QUOTED_IDENTIFIER находится на ie. SET QUOTED_IDENTIFIER ON;

Смежные вопросы