在SQL nvarchar中选择top而不是int

时间:2017-05-19 01:57:40

标签: sql-server

我尝试在参数中使用带顶值的select语句:

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

它给我一个错误:

  

将varchar值'SELECT TOP'转换为时,转换失败   数据类型int。

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

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

我的问题是:

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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