无法在动态sql

时间:2016-02-02 18:09:32

标签: sql-server

我正在SQL Server中执行动态Sql片段,其用例如下:

获取一个字母数字格式的歌曲ID(SongId)(例如:affgb:2c1) 并从Id。

中提取Songs表中的一些元数据

在正常情况下,它看起来像这样:

SELECT *
FROM SongTable
WHERE SongId = 'affgb:2c1'

由于一些限制,我使用动态SQL将歌曲ID作为名为@songId的varchar类型参数获取。查询如下:

DECLARE @querySongFromId NVARCHAR(MAX);
SET @querySongFromId = 'SELECT * FROM SongTable WHERE SongId =' + @songId;
EXECUTE sp_executesql @querySongFromId;

上述查询失败,因为我无法在@songId

之前插入单引号

我尝试通过以下方式转义单引号:

SET @querySongFromId = 'SELECT * FROM SongTable WHERE SongId = '' ' + @songId + ' '' ';

但我收到"Incorrect syntax near '=' "错误。

有人可以解释如何解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

怎么样这样做:

DECLARE @querySongFromId NVARCHAR(MAX);
DECLARE @songId VARCHAR(100) = 'affgb:2c1'
SET @querySongFromId = 'SELECT * FROM SongTable WHERE SongId = @songId';
EXECUTE sp_executesql @querySongFromId,N'@songId VARCHAR(100)',@songId;