SQL Server 存储过程连接字符串作为查询

Ali*_*lan 4 sql database sql-server string stored-procedures

我想知道是否可以将 sql 查询的某些部分定义为字符串。

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

实际上@sirketid@uzmanparams@basvurukodu工作得很好,但是@ORA_BASVURU_KESIN_KOSULparam 引起了问题。

我认为因为它有一些特定于 sql 的表达式,如and,所以它的处理方式与用于比较或分配的简单变量(如 )不同@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; 
Run Code Online (Sandbox Code Playgroud)

我可以连接这样的查询部分吗?如果可以,如何连接?

谢谢

Est*_* P. 5

您的查询应该像这样:

  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
Run Code Online (Sandbox Code Playgroud)

  • 使用“NVARCHAR(MAX)”,没有理由接受更少的东西。`@sirketid` 将是未定义的。以这种方式连接字符串参数是行不通的,它们需要被转义。使用带参数的“EXEC”而不是“sp_executesql”可能会导致大量查询计划缓存污染。对于动态 SQL,问题在于细节。 (2认同)