SQL Server存储过程concat字符串作为查询
我想知道是否可以将sql查询的某些部分定义为字符串 我编写了下面的代码,但无法将预定义的字符串部分连接到现有查询中 实际上,SQL Server存储过程concat字符串作为查询,sql,sql-server,database,string,stored-procedures,Sql,Sql Server,Database,String,Stored Procedures,我想知道是否可以将sql查询的某些部分定义为字符串 我编写了下面的代码,但无法将预定义的字符串部分连接到现有查询中 实际上,@sirketid,@uzman,@basvurukodu参数运行良好,但是@ORA_BASVURU_KESIN_KOSUL参数正在引发问题 我认为,由于它有一些sql特殊表达式,如和,因此与用于比较或赋值的简单变量(如@sirket\u id)不同 它不会抛出任何错误消息,代码不会执行操作 SET @ORA_BASVURU_KESIN_KOSUL = 'and akfti
@sirketid
,@uzman
,@basvurukodu
参数运行良好,但是@ORA_BASVURU_KESIN_KOSUL
参数正在引发问题
我认为,由于它有一些sql特殊表达式,如和,因此与用于比较或赋值的简单变量(如@sirket\u 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;
我可以查询这样的部分吗?如果可以,如何查询
谢谢您的查询应该如下所示:
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
您将需要动态sql。首先连接要执行的整个SQL,最后使用execute执行SQL。您不能像这样连接新的条件。要做到这一点,您必须使查询成为动态的,而且对于动态SQL来说更一般。关于这个话题有很多话要说。由于涉及注入的风险,将任意SQL作为参数传递几乎从来都不是一个好方法。这比我想象的要复杂得多:)使用
NVARCHAR(MAX)
,没有理由满足于更少的要求<代码>@sirketid将被取消定义。以这种方式连接字符串参数是行不通的,需要对它们进行转义。使用带有参数的EXEC
而不是sp_executesql
,可能会导致大量查询计划缓存污染。使用动态SQL,魔鬼就在细节中。