EXEC sp_executesql 将使用整数而不是 VarChars

EXEC sp_executesql will work with Integers but not VarChars

我在 SQL Server 2017 中使用 EXEC sp_executesql 进行动态查询。

我已经尝试了各种测试场景,只要传入的值是 Integers,我就可以在我的查询(对于其他参数)中得到结果。因此,这意味着位置和部门测试有效。但是,我不知道在发送 NVARCHAR 或 DateTime 时是否需要做一些不同的事情。

这是我的存储过程,带有 NVARCHAR 参数。你看到我做错了什么吗?


(
@tktitle NVARCHAR(200)
)

AS
BEGIN

Declare  @SQL NVARCHAR(MAX)

Set @SQL = 'SELECT        timekeep.tkinit, timekeep.tkfirst, timekeep.tklast, 
                         timekeep.tkemdate, timekeep.tktitle, timekeep.tkloc, timekeep.tkdept

FROM   abc.xyz'        
                     


IF @tktitle IS NOT NULL
Select @SQL = @SQL + 'AND ([tktitle] = @tktitle)'
EXEC sp_executesql @SQL, N'@tktitle varchar',  @tktitle


END

我至少可以确定三个问题:

  • 作为参数传递时,varchar需要指定长度。
  • 您还需要在 AND 之前添加一个 space,并且 AND 应该是 WHERE
  • 您需要在执行调用中分配参数。

所以:

IF @tktitle IS NOT NULL
    Select @SQL = @SQL + ' WHERE ([tktitle] = @tktitle)';
-------------------------^ separator
EXEC sp_executesql @SQL, N'@tktitle varchar(200)', @tktitle=@tktitle;