[英]Why do I have two different return values from the queries in T-SQL
您好,我想知道為什么我有2個不同的返回值。 這是第一個查詢:
declare @currentcolumn_val varchar
declare @start integer
set @currentcolumn_val = 'state_val'
set @start =1
select @currentcolumn_val from z_skm where id = @start
返回的值只是“ s”
這是第二個提供正確返回值的查詢:
select state_val from z_skm where id = 1
該查詢給了我確切的信息。
希望你們能幫上忙。
干杯史蒂文
您的第一個查詢返回一個常量。 第二個是返回列的值。
由於聲明,您返回's
而不是'state_val'
:
declare @currentcolumn_val varchar;
您在varchar()
上沒有長度,並且在這種情況下,它的默認長度為1。在SQL Server中, 始終將長度與varchar()
一起使用。
如果您希望列是動態的,則需要使用動態SQL:
declare @currentcolumn_val nvarchar(255);
declare @start integer;
declare @sql nvarchar(max) = 'select @currentcolumn_val from z_skm where id = @start';
set @sql = replace(@sql, '@currentcolumn_val', @currentcolumn_val);
exec sp_executesql @sql, N'@start int', @start = @start;
您可以傳遞參數作為參數,但不能傳遞列或表名。
您已將@currentcolumn_val
聲明為varchar
,其默認長度為1。
如果將其替換為declare @currentcolumn_val varchar(10)
您將看到整個值
首先,您沒有給@currentcolumn_val
參數指定大小,因此它等效於VARCHAR(1)
。 這意味着:
set @currentcolumn_val = 'state_val'
基本上與:
set @currentcolumn_val = 's'
然后在SELECT中,您將返回該變量的值,而不是表中的列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.