SQL varchar vs varchar(n)

【标题】:SQL varchar varchar(n)
【日期】:2016-07-04
【类别】:SQLSERVER
【问题】:T-SQL 声明变量类型为varchar后执行插入语句插入不成功
【原因】:声明变量varchar不带长度,sqlserver会默认长度1代替
http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring-varchar-without-length.aspx
【怎么发现的】:

declare @f_accounts varchar
set @f_accounts=‘H6155‘

MERGE INTO t_OtherCredit AS T
using (SELECT @f_accounts AS f_accounts) AS S
ON (T.f_accounts = S.f_accounts AND Datediff(d, T.f_date, Getdate()) = 0)
WHEN NOT MATCHED THEN
INSERT (f_accounts,
f_date)
VALUES(@f_accounts,
Getdate()) ;
--执行T-SQL后查询
SELECT *
FROM t_OtherCredit
WHERE Datediff(d, f_date, Getdate()) = 0
AND f_accounts = ‘H6154‘

无数据,然而,直接替换@f_accounts为字面量查询到正常数据

【修复】:declare @f_accounts varchar(20)

【在哪些文件修改了】: 无

【我导致的】:是

【解决Bug的时间】:2016-07-04 13:10

【教训】:sqlserver还是简单了解阶段

时间: 2024-09-11 05:14:34

SQL varchar vs varchar(n)的相关文章

SQL Server 中VARCHAR(MAX)变量赋值引起的性能问题。

案例环境: 操作系统版本 : Windows Server 2008 R2 Standard  SP1 数据库版本   :  Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) 案例介绍: 由于不能将生产环境的代码和数据贴上来,所以我构造了下面一个小案例,当然没法和生产环境的案例一致.只能是接近而已.但是足以反映问题本质就足够了. DROP TABLE ProductPrice;   GO   CREATE TABLE ProductPrice

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [others] in table [auth_user]; found [varchar (Types#VARCHAR)], but expec

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [others] in table [auth_user]; found [varchar (Types#VARCHAR)], but expecting [integer (Types#INTEGER)] 这个错误是由于使用springdata

SQL 把(n)varchar类型转换为多列或多个value的集合

有时侯有在服务端查询的时侯可能会用需要多个参数,而且位数是动态不一定的. 这个时侯可能就把一个list传递到sql里做为条件. -- -- Split a list and return a table if Ids -- Used to take a comma separated list as a string and return a table  -- CREATE FUNCTION [dbo].[SplitIDList] (     @CommaSeparatedIDList NVA

SQL Server char,varchar,nchar,nvarchar区别

(1)       定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固定长度,存储Unicode字符,不足的补英文半角空格 varchar:  可变长度,存储ANSI字符,根据数据长度自动变化. nvarchar: 可变长度,存储Unicode字符,根据数据长度自动变化. nvarchar(n) :包含 n个字符的可变长度 Unicode 字符数据.n 的值必须介于 1  与  4,000 之间.字节的存储大小是所输入字符个数的两倍.所输入的数据字

SQL中 char varchar和nvarchar的区别

转至:http://www.cnblogs.com/carekee/articles/2094676.html char    char是定长的,也就是当你输入的字符小于你指定的数目时,char(8),你输入的字符小于8时,它会再后面补空值.当你输入的字符大于指定的数时,它会截取超出的字符.   nvarchar(n)    包含 n 个字符的可变长度 Unicode 字符数据.n 的值必须介于 1 与 4,000 之间.字节的存储大小是所输入字符个数的两倍.所输入的数据字符长度可以为零.   

sql uniqueidentifier转varchar

--- DECLARE @myid uniqueidentifierSET @myid = NEWID()SELECT CONVERT(char(255), @myid) AS 'char';GO-- declare @allstring char(255),@AreaUid Uniqueidentifierset @AreaUid='37A1DA94-4AC6-4ED0-B96F-BA3FE6AEACC8'set @allstring= cast(@AreaUid as char(255))s

SQL中char,varchar和nvarchar 之间的区别

1.char[n] 是定长的,也就是当存储字符小于n时,他会自动补齐(补空值).优点:效率较varchar高.2.varchar[n]是变长且非unicode字符数据类型,n的取值在1到8000之间,该类型英文字符占一个字节,中文字符占两个字节.优点:更加合理利用空间,不会造成过多的浪费.3.nvarchar[n]是变长且unicode字符数据类型,n的取值在1到4000之间,该类型字符无论中英文都占取两个字节.ps:希望各位大佬可以多多批评指正,补充. 原文地址:https://blog.51

mysql varchar vs oracle varchar2

1.错误提示: mysql的Data truncation: Data too long for column 'path' at row 1 错误原因: 1.字段过长而导致出错的, 2. 可能是因为数据库里的表设置的字符集不相同. 解决办法: varchar(10) ——>varchar(20) alter table `cms_activity_test` convert to character set gbk collate gbk_chinese_ci;(单独修改指定表的字符集) 其他

sqlserver中将varchar类型转换为int型再进行排序的方法

sql中把varchar类型转换为int型然后进行排序,如果我们数据库的ID设置为varchar型的 在查询的时候order by id的话 如果我们数据库的ID设置为varchar型的 在查询的时候order by id的话我们是不希望看到如下情况的. 我们可以把varchar转换为int 然后进行排序 一. 复制代码代码如下: select * from yourtable order by cast(yourcol as int); 适用于SQLServer Oracle 二. 复制代码代