2016-08-06 1 views
1

Есть ли способ добавить фиктивный столбец в динамическое выполнение запросов в SQL Server?Есть ли способ добавить фиктивный столбец в динамическое выполнение запросов в SQL Server?

declare @sql nvarchar(max) 

declare @centerid int 

@sql= 'Select ms.SetTitle,se.Quantity as ccp ,'' as dlp from StockEntry_Center se 
      inner join Mast_Set ms on se.SetID=ms.SetID where se.IsDeleted=''False'' and se.CenterID='+convert(nvarchar,@centerid) 

exec(@sql) 

В приведенном выше динамический запрос я хочу, чтобы добавить фиктивный столбец '' as dlp. Но это показывает ошибки. Заранее спасибо.

+0

Используйте запрос 'SET @sql = 'здесь.'. Показать ошибку. – NEER

+2

*** ЧТО *** ошибка вы получаете? В конце концов, мы не можем ** читать ваш экран, ни ваш разум - вы должны будете нам рассказать! ** –

+0

Вы пытаетесь добавить фиктивный столбец, который на самом деле является пустой строкой. Независимо от возможности этого быть проблемой, это очень, ** ОЧЕНЬ ** плохая практика. Я бы предложил вам развернуть '' dummy'', – FDavidov

ответ

4

Вы получаете ошибку из-за одинарные кавычки, как gofr1 уже объяснил, но я хотел бы также сделать несколько других изменений в запросе:

declare @sql nvarchar(max), @centerid int = 100 

SET @sql= N' Select ms.SetTitle 
        ,se.Quantity as ccp 
        ,'''' as dlp 
      from StockEntry_Center se 
      inner join Mast_Set ms on se.SetID = ms.SetID 
      where se.IsDeleted=''False'' 
      and se.CenterID = @centerid' 

Exec sp_executesql @sql 
        ,N'@centerid int' 
        ,@centerid 

Использование sp_executesql и передать параметры в качестве параметров, а затем конкатенации это для вашего динамического sql, в этом случае у вас есть только переменная Integer, но если вы когда-либо сделаете эту конкатенацию с помощью строковой переменной, вы и подвергая себя возможной атаке на SQL-инъекцию, лучше быть в безопасности, чем сожалеть.

+0

да это тоже правильный ответ. Спасибо @ M.Ali – user6180198

0

Использовать '''' as dmp или NULL as dmp. Бьюсь об заклад, вы получили ошибки из-за котировок.

+0

'' '' ''разрешается в одну цитату. Это должно быть '' '' '' ''. – FDavidov

+0

@FDavidov он должен быть '' ', если вы соединяетесь с какой-либо другой переменной, которая должна быть в кавычках, например' '' + @ param + '' ', поэтому она дает «param». – gofr1

+0

Вопрос включает в себя выбор, который читает '' Выберите ms.SetTitle, se.Quantity как ccp, '' как dlp ... ', который преобразуется в' Select ms.SetTitle, se.Quantity as ccp, 'как dlp. ..', что, очевидно, является ошибкой. – FDavidov

0

Перечитывая ваш выбор (и делает его легче проходных):

@sql = 'Select ms.SetTitle,se.Quantity as ccp , 
       ''      as dlp 
      from StockEntry_Center se 
     inner join 
       Mast_Set   ms 
     on  se.SetID = ms.SetID 

    where se.IsDeleted=''False'' 
     and se.CenterID='+convert(nvarchar,@centerid) ; 

Это преобразуется в:

Select ms.SetTitle,se.Quantity as ccp , 
     '      as dlp 
     from StockEntry_Center se 
    inner join 
      Mast_Set   ms 
    on  se.SetID = ms.SetID 

where se.IsDeleted=''False'' 
    and se.CenterID=convert(nvarchar,@centerid) ; 

Как вы можете видеть, есть один ' на слева от as dlp.

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