簡體   English   中英

為什么我在T-SQL查詢中有兩個不同的返回值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM