2017-08-07 134 views
0

我在想我是否可以将我的sql查询的某些部分定义为字符串。SQL Server存储过程concat字符串作为查询

我在下面的代码工作,但我无法设法将预定义的字符串部分连接到现有的查询。

其实@sirketid,@uzman,@basvurukodu params工作正常,但是@ORA_BASVURU_KESIN_KOSUL param正在引发问题。

我想,因为它具有一些SQL-spesific表达像,则diffrently处理比用于比较或分配诸如@sirket_id简单变量。

它不会抛出任何错误消息,代码根本不执行操作。

SET @ORA_BASVURU_KESIN_KOSUL = 'and akftif = 1'; 

UPDATE basvuru 
SET sirket = @sirketid, 
    talep_gorevlendirme_rapor = 'G', 
    birimi = 'SS', 
    uzman = @uzman, 
WHERE 
    kod = @basvurukodu + ' ' + @ORA_BASVURU_KESIN_KOSUL; 

我可以像这样连接查询部件,如果是这样,怎么办?

感谢

+0

您将需要动态sql。首先连接你想执行的整个SQL,最后用EXEC执行SQL –

+0

你不能像这样连接新的条件。要做到这一点,你必须使查询动态 –

+0

[您的浏览背景材料](http://sommarskog.se/dyn-search.html),以及[这](http://sommarskog.se/dynamic_sql。 HTML)更一般的动态SQL。关于这个话题有很多要说的。由于涉及注入的风险,传入任意SQL作为参数几乎不是一个好方法。 –

回答

1

您的查询应该像:

  1. 串连整个查询
  2. EXEC
当然

,你必须得申报的其他变量执行查询:

SET @ORA_BASVURU_KESIN_KOSUL = 'and akftif = 1'; 

DECLARE @MyExecSQL varchar(2000) = 
    'UPDATE basvuru 
     SET sirket = @sirketid 
      ,talep_gorevlendirme_rapor = ''G'' 
      ,birimi = ''SS'' 
      ,uzman = ' + @uzman + 
    ' WHERE kod = ' + @basvurukodu + 
     ' ' + @ORA_BASVURU_KESIN_KOSUL + '' 
;  
EXEC @MyExecSQL 
+0

使用'NVARCHAR(MAX)',没有理由解决任何问题。 '@ sirketid'将是未定义的。以这种方式连接字符串参数不起作用,它们需要被转义。使用'EXEC'而不是'sp_executesql'参数可能会导致很多查询计划缓存污染。用动态SQL,魔鬼的细节。 –

相关问题