在SQL Server中将数据库排序规则读入变量时出现问题
我遇到了一件奇怪的事情,我不能将变量的值设置为查询的结果。查询正在读取数据库的排序规则,并且本身工作正常:在SQL Server中将数据库排序规则读入变量时出现问题,sql,sql-server,database,sqltransaction,Sql,Sql Server,Database,Sqltransaction,我遇到了一件奇怪的事情,我不能将变量的值设置为查询的结果。查询正在读取数据库的排序规则,并且本身工作正常: SELECT collation_name FROM sys.databases WHERE [name] = 'my_DB'; 结果是: SQL\u Latin1\u General\u CP1\u CI\u AS 但是当我想把结果放入一个变量中时,我没有得到结果(也没有错误) 我可以将其他SELECT查询的结果设置为varchar变量。这是一种方法: declare @DB_col
SELECT collation_name
FROM sys.databases
WHERE [name] = 'my_DB';
结果是:
SQL\u Latin1\u General\u CP1\u CI\u AS
但是当我想把结果放入一个变量中时,我没有得到结果(也没有错误)
我可以将其他SELECT查询的结果设置为varchar变量。这是一种方法:
declare @DB_collation varchar(100);
SELECT @DB_collation =
collation_name
FROM sys.databases
WHERE name = 'tempdb'
print @DB_collation;
将变量放在select关键字之后
下面是一个演示:
如果这不起作用,则可以选择变量的值:
declare @DB_collation varchar(100);
SELECT @DB_collation =
collation_name
FROM sys.databases
WHERE name = 'tempdb'
select @DB_collation;
备注:请在“消息”选项卡中查看打印语句的结果,而不是在“结果”选项卡中查看“打印语句的结果”“打印语句不起作用”不会为任何人提供任何关于错误和修复方法的线索。我所能告诉您的是,这个查询在功能上等同于单独选择它,如果您愿意,您可以使用ManagementStudio在单独的实例上验证这一点。检查诸如“我是否在正确的服务器上”、“我是否使用相同的登录名”、“我的数据库名是否完全相同,不包含大小写差异或不可见字符”之类的基本内容。您是否放置
选择@DB\u collation代码>在查询的底部?(也可以尝试选择LEN(@DB\u collation)
,以获得乐趣)。请记住,给定的查询不会产生结果,它只设置变量。捕获PRINT
消息是在单独的选项卡中完成的(在SSMS中;其他客户端可能根本无法捕获它们)。@Iraj请在消息选项卡而不是结果中查看您的结果tab@Iraj我已经更新了我的答案。那么你在“消息”选项卡中找到了它们?@VBoka是的,它在“消息”选项卡中。谢谢您的时间。我看到@JeroenMostertThank you的评论中已经写了这些内容。它起作用了。但我还是不明白为什么打印不起作用。我试过:declare@testvar-varchar(100);设置@testvar=@DB\u排序规则;打印@testvar
,但仍然不会打印任何内容。我不确定变量的内容是否为normalvarchar。这对我来说很重要,因为我在代码/查询的其余部分中需要它。@Iraj您使用的工具的名称是什么?@Iraj我不知道您正在查看的演示是什么,但此演示:与打印一起使用。您必须知道,我必须使用tempdb而不是my_DB,因为我在sys.databases中有tempdb,正如您在本演示的第一次选择中所看到的那样
declare @DB_collation varchar(100);
SELECT @DB_collation =
collation_name
FROM sys.databases
WHERE name = 'tempdb'
select @DB_collation;