2017-01-11 4 views
1

У меня есть проблема с динамическим SQL (да только один;))Dynamic SQL - почему переменная остается пустой

Внутри хранимой процедуры я объявил локальную переменную так:

DECLARE @cmd NVARCHAR (макс) Позже в коде у меня есть эта линия с большим количеством входных параметров мой зр получил (извините за беспорядок не удалось организовать его):

SET @cmd = 'INSERT INTO dbo.' + @ArchiveTableName + '(' + @ArchiveFieldsName + ',' + @ArchiveEntityMainIdentifierField + ') 
    SELECT ' + @EntityFieldsName + ',' + '' + @EntityMainIdentifierField + '' + 
     ' FROM [' + @OrganizationName + '].[dbo].[' + @EntityName + '] ent 
     left join dbo.' + @ArchiveTableName + ' arc on arc.' + @ArchiveEntityMainIdentifierField + ' = ent.' + @EntityMainIdentifierField + ' 
     where ent.' + @EntityMainIdentifierField + ' = ''' + @ParentId + ''' and arc.' + @ArchiveEntityMainIdentifierField + ' is null' 

После того как я отлажена, я нашел что-то странное. После запуска этого @cmd остается пустым.

Может кто-нибудь, пожалуйста, дать мне понять, почему это может произойти?

+3

Если одна переменная '' NULL', то вся строка станет 'NULL' –

+0

oh did not знает ее, я проверю ее сейчас. –

+0

yep thats вещь, спасибо! –

ответ

5

Бьюсь об заклад, одна из ваших других переменных равна NULL. 'Something' + NULL = NULL. Вы можете использовать CONCAT (sql server 2012+), он превратит NULL в пустую строку. Лучше также использовать COALESCE (sql server 2008+) (и убедитесь, что основные переменные не являются NULL).

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