SQL SERVER 变量的Collcation是跟哪个数据库相同?

KevinLiu 2013-05-21 02:21:16
加精
看MSDN上面说是跟着当前数据库的,但是实际测试下来是跟TEMPDB,大家有没有遇到过类似问题?有没有官方文档?

看论坛上有人遇到变量大小写敏感的问题,但是当前数据库是大小写不敏感的,所以才有这个帖子。
...全文
1151 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengjun 2013-05-27
  • 打赏
  • 举报
回复
还有没大神路过给看看呢
u010829884 2013-05-25
  • 打赏
  • 举报
回复
看不懂。。。。
  • 打赏
  • 举报
回复
呵呵,LZ理解错了,大小敏感指的是变量的具体值,而不是变量名称本身。
KevinLiu 2013-05-23
  • 打赏
  • 举报
回复
引用 29 楼 SQL_Beginner 的回复:
[quote=引用 28 楼 SmithLiu328 的回复:] [quote=引用 27 楼 SQL_Beginner 的回复:] 呵呵,LZ理解错了,大小敏感指的是变量的具体值,而不是变量名称本身。
那变量名称大小写敏感是跟tempdb保持一致吗[/quote] 名称跟 DB instance走。 http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/0d833fab-2b32-4b98-a3ab-cdf8c743e5e0[/quote] Got it, thanks
  • 打赏
  • 举报
回复
引用 28 楼 SmithLiu328 的回复:
[quote=引用 27 楼 SQL_Beginner 的回复:] 呵呵,LZ理解错了,大小敏感指的是变量的具体值,而不是变量名称本身。
那变量名称大小写敏感是跟tempdb保持一致吗[/quote] 名称跟 DB instance走。 http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/0d833fab-2b32-4b98-a3ab-cdf8c743e5e0
KevinLiu 2013-05-23
  • 打赏
  • 举报
回复
引用 27 楼 SQL_Beginner 的回复:
呵呵,LZ理解错了,大小敏感指的是变量的具体值,而不是变量名称本身。
那变量名称大小写敏感是跟tempdb保持一致吗
u010799241 2013-05-22
  • 打赏
  • 举报
回复
不太明白哦~
ChinaITOldMan 2013-05-21
  • 打赏
  • 举报
回复
是的,谢谢Kevin的鼎力相助!
KevinLiu 2013-05-21
  • 打赏
  • 举报
回复
引用 23 楼 u010785069 的回复:
MSDN上找到的信息是说当前数据库的COLLATION: You cannot specify a collation for character variables and parameters; they are always created with the default collation of the database. http://msdn.microsoft.com/en-us/library/aa174903(v=sql.80).aspx
这个我已经看到了,但是测试下来跟这个解释不通。
假身份卡机 2013-05-21
  • 打赏
  • 举报
回复
MSDN上找到的信息是说当前数据库的COLLATION: You cannot specify a collation for character variables and parameters; they are always created with the default collation of the database. http://msdn.microsoft.com/en-us/library/aa174903(v=sql.80).aspx
左小宸 2013-05-21
  • 打赏
  • 举报
回复
引用 1 楼 SmithLiu328 的回复:
MSDN上找到的信息是说当前数据库的COLLATION: You cannot specify a collation for character variables and parameters; they are always created with the default collation of the database. http://msdn.microsoft.com/en-us/library/aa174903(v=sql.80).aspx
在网上看看。。。
左小宸 2013-05-21
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
有例子吗?我曾经帮别人弄过一个存储过程报错,然后检查了整个用户数据库,发现都没问题,后来发现他用了一个临时表,再去tempdb看,果然tempdb和用户库不一致,改了之后就没事了。
引用 11 楼 SmithLiu328 的回复:
[quote=引用 9 楼 xyc880813 的回复:] 刚才我测试的结果是这样的,如果是create table #tb1这样的,排序规则走的TempDB 如果是declare @tb2 table 这样的,排序规则走的当前上下文use的数据库 Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (X64) Jun 11 2012 16:41:53 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
不是表变量 是字符串变量,表变量的话是存储在TEMPDB的。 [/quote] 可以百度下、、、
陈大勇 2013-05-21
  • 打赏
  • 举报
回复
引用 4 楼 DBA_Huangzj 的回复:
哦,对哦,没看清你说的是“变量”,不过你的数据库试过设为大小写不敏感不?我也想知道,推荐一下你的贴
引用 10 楼 SmithLiu328 的回复:
我的是字符串变量 [quote=引用 8 楼 DBA_Huangzj 的回复:] 问一下你的是表变量还是字符串变量?
我的是字符串变量。[/quote]
KevinLiu 2013-05-21
  • 打赏
  • 举报
回复
引用 16 楼 xyc880813 的回复:
[quote=引用 15 楼 SmithLiu328 的回复:]
懂了,我完全理解错题目了= = 我也去测试一下[/quote] 可能我说的不够详细 呵呵 非常感谢。
xyc880813 2013-05-21
  • 打赏
  • 举报
回复
引用 15 楼 SmithLiu328 的回复:
懂了,我完全理解错题目了= = 我也去测试一下
KevinLiu 2013-05-21
  • 打赏
  • 举报
回复
xyc880813 2013-05-21
  • 打赏
  • 举报
回复
所以我认为#tb这样的是存在TempDB里了,自然遵循TempDB的排序规则 而@tb这样的,就是遵循当前库的排序规则了 另外我不太明白,排序规则为啥会跟字符串变量有联系?排序规则不是作用在表中的一个属性么? 是您declare了一个变量,然后插入表?还是做了什么操作?
xyc880813 2013-05-21
  • 打赏
  • 举报
回复
楼上贴错图了
真图在这:
xyc880813 2013-05-21
  • 打赏
  • 举报
回复
引用 11 楼 SmithLiu328 的回复:
[quote=引用 9 楼 xyc880813 的回复:]
刚才我测试的结果是这样的,如果是create table #tb1这样的,排序规则走的TempDB
如果是declare @tb2 table 这样的,排序规则走的当前上下文use的数据库

Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (X64)
Jun 11 2012 16:41:53
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

不是表变量 是字符串变量,表变量的话是存储在TEMPDB的。
[/quote]

那就很奇怪了,我当前的数据库排序规则是:SQL_Latin1_General_CP1_CI_AS
tempdb的排序规则是:Chinese_PRC_CI_AS
然后我创建一个临时表,create table #t1(

name varchar(20) collate Albanian_CI_AI_WS,

value int);
之后再设置一个表变量,declare @t3 table
(name varchar(20) ,

value int)

之后select * from #t1 A inner join @t3 C on A.name=c.name

会报错:Msg 468, Level 16, State 9, Line 6
Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "Albanian_CI_AI_WS" in the equal to operation.

KevinLiu 2013-05-21
  • 打赏
  • 举报
回复
引用 9 楼 xyc880813 的回复:
刚才我测试的结果是这样的,如果是create table #tb1这样的,排序规则走的TempDB 如果是declare @tb2 table 这样的,排序规则走的当前上下文use的数据库 Microsoft SQL Server 2008 R2 (SP1) - 10.50.2550.0 (X64) Jun 11 2012 16:41:53 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
不是表变量 是字符串变量,表变量的话是存储在TEMPDB的。
加载更多回复(10)

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧