2012-01-18 45 views
1

這似乎是一個我不知道的簡單語法問題。我想根據允許的列限制來定義一些修剪某些數據的函數。如何動態傳遞CAST的長度

下面是一些有效的示例代碼。

DECLARE @value nvarchar(max) = ' Test string abc ' 
DECLARE @length integer = 10 
DECLARE @trimValue nvarchar(max) = @value 
SELECT @trimValue = LTRIM(RTRIM(CAST(@value AS nvarchar(10)))) 
SELECT @trimValue 

回報 '測試STR'

現在我想在鑄造長度將動態。我怎樣才能做到這一點?

SELECT @trimValue = LTRIM(RTRIM(CAST(@value AS nvarchar(@length)))) 
+0

隨着'sp_executesql'和輸出參數,我懷疑 – JNK

回答

2

,你可以在這種情況下,因爲它是一個字符串使用LEFT,否則你需要做的是動態

DECLARE @value nvarchar(max) = ' Test string abc ' 
DECLARE @length integer = 10 

DECLARE @trimValue nvarchar(max) = @value 
SELECT @trimValue = LEFT(LTRIM(RTRIM(@value)),@length) 
SELECT @trimValue 
+0

+1,我提前25秒:) – AdaTheDev

0

你爲什麼要這麼做?所有VARCHAR和NVARCHAR的開銷都是相同的,最大長度分別爲8000和4000。

真正的問題是,演員本身不會真正起作用,因爲它將被重寫爲聲明的變量長度。

0

如何使用sp_executesql的動態設置大小的示例:

DECLARE @value nvarchar(max) = ' Test string abc ' 
DECLARE @length integer = 10 
DECLARE @trimValue nvarchar(max) = @value 
DECLARE @parameters NVARCHAR(100) 

declare @sql nvarchar(200) 
set @sql = N'select @trimValueOUT = LTRIM(RTRIM(CAST(''' + @value + ''' AS nvarchar(' + cast(@length as varchar(15)) + '))))' 
SET @parameters = N'@trimValueOUT nvarchar(' + cast(@length as varchar(15)) + ') output' 

--print @sql 
--print @parameters 
execute sp_executesql @sql, @parameters, @trimValueOUT = @trimValue output 
SELECT @trimValue