2017-05-19 12 views
1

我試圖用頂級值select語句像參數:選擇頂在SQL nvarchar的,而不是INT

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

這回我一個錯誤:

Conversion failed when converting the varchar value 'SELECT TOP ' to data type int.

但是,當我從改變intnvarchar工作:

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

我的問題是:

爲什麼Sql接受數據類型nvarchar而不是Int

回答

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

這是工作,如果DECLARE SQL VARCHAR(255)改變申報SQL NVARCHAR (255)..謝謝 - – redzsol

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 
+0

Concat不工作..感謝 – redzsol

+0

爲什麼?哪個版本的sql server? –

+0

我正在使用2008 ..我已upvoted您的帖子,但我認爲有人downvoted它。 – redzsol

相關問題