将数据库排序规则读入SQL Server中的变量时出现问题

问题描述

我遇到了一个奇怪的事情,我无法将变量的值设置为查询的结果。该查询正在读取数据库的排序规则,并且本身可以正常工作:

SELECT collation_name 
FROM sys.databases
WHERE [name] = 'my_DB';

结果类似于: sql_latin1_General_CP1_CI_AS

但是当我想将结果放入变量中时,我没有结果(也没有错误

declare @DB_collation varchar(100);
set @DB_collation = (SELECT 
    collation_name 
    FROM sys.databases
    WHERE name = 'my_DB')  
print @DB_collation;

我将其他SELECT查询的结果设置为varchar变量没有问题。

解决方法

这是这样做的方法:

declare @DB_collation varchar(100);
SELECT  @DB_collation = 
    collation_name 
    FROM sys.databases
    WHERE name = 'tempdb' 
    
print @DB_collation;

将变量放在select关键字之后。

这是一个演示:

DEMO

如果这不起作用,则可以选择变量的值:

declare @DB_collation varchar(100);
SELECT  @DB_collation = 
    collation_name 
    FROM sys.databases
    WHERE name = 'tempdb' 
    
select @DB_collation;

P.S:请在“消息”标签而不是“结果”标签中查看PRINT语句的结果