在 SQL nvarchar 中选择 top 而不是 int



我尝试在参数中使用具有最高值的选择语句,例如:

CREATE PROCEDURE PROC_TOP @NUM INT AS
DECLARE @SQL VARCHAR(255) = 'SELECT TOP ' + @NUM + ' * FROM MYTABLE;'
BEGIN
    EXEC sp_executesql @SQL
END

它返回我一个错误:

将 varchar 值"选择顶部"转换为 数据类型 int。

但是当我从int更改为nvarchar它的工作时:

PROC_TOP @NUM nvarchar(50)
DECLARE @SQL nvarchar(255)

我的问题是:

为什么 Sql 接受数据类型nvarchar而不是Int

DECLARE @SQL VARCHAR(255) = 'SELECT TOP ' + cast(@NUM as varchar(6)) + ' * FROM MYTABLE;'

与 + 的字符串连接不会进行数据类型转换,如果您使用 concat,它将隐式进行数据类型转换,如下所示

CREATE PROCEDURE PROC_TOP @NUM INT AS
DECLARE @SQL VARCHAR(255) = concat('SELECT TOP ' , @NUM , ' * FROM MYTABLE;')
BEGIN
    EXEC sp_executesql @SQL
END

最新更新