小编Phr*_*cis的帖子

使用 MAX 文本或更具体的较小类型

有人正在审查我用于创建表的 DDL 代码并建议,当他们看到我看到使用VARCHAR(256)文本字段时,我希望它非常小,比如名字或其他什么,我应该总是只使用VARCHAR(MAX)和链接为什么使用 varchar(max )。我读过它,但它似乎过时了,因为它专注于 2005 年,并且似乎没有提供任何真正的理由来在所有文本字段上每行分配最多 2 GB。

从性能、存储等角度来看,应该如何决定是使用VARCHAR(MAX)SQL Server 的现代版本还是使用更小更具体的类型?(例如,2008、2012、2014)

performance database-design sql-server datatypes varchar

23
推荐指数
2
解决办法
1027
查看次数

用户共享查询:动态 SQL 与 SQLCMD

我必须重构并记录一些foo.sql查询,这些查询将由一个数据库技术支持团队共享(用于客户配置等)。有些类型的票会定期出现,每个客户都有自己的服务器和数据库,但除此之外,架构是完全相同的。

存储过程目前不是一个选项。我正在争论是使用动态还是 SQLCMD,我没有使用过太多,因为我对 SQL Server 有点陌生。

SQLCMD 脚本我觉得对我来说绝对“看起来”更干净,更容易阅读并根据需要对查询进行小的更改,但也会强制用户启用 SQLCMD 模式。由于使用字符串操作编写查询而导致语法突出显示丢失,因此动态更加困难。

这些正在使用 Management Studio 2012,SQL 版本 2008R2 进行编辑和运行。这两种方法的优缺点是什么,或者一种方法或另一种方法的一些 SQL Server“最佳实践”是什么?其中一个比另一个“更安全”吗?

动态示例:

declare @ServerName varchar(50) = 'REDACTED';
declare @DatabaseName varchar(50) = 'REDACTED';
declare @OrderIdsSeparatedByCommas varchar(max) = '597336, 595764, 594594';

declare @sql_OrderCheckQuery varchar(max) = ('
use {@DatabaseName};
select 
    -- stuff
from 
    {@ServerName}.{@DatabaseName}.[dbo].[client_orders]
        as "Order"
    inner join {@ServerName}.{@DatabaseName}.[dbo].[vendor_client_orders]
        as "VendOrder" on "Order".o_id = "VendOrder".vco_oid
where "VendOrder".vco_oid in ({@OrderIdsSeparatedByCommas});
');
set @sql_OrderCheckQuery = replace( @sql_OrderCheckQuery, '{@ServerName}',   quotename(@ServerName)   );
set @sql_OrderCheckQuery = …
Run Code Online (Sandbox Code Playgroud)

sql-server scripting dynamic-sql sqlcmd

15
推荐指数
1
解决办法
1351
查看次数

错误 42P01:关系不存在

我是创建数据库的新手,这个错误让我目瞪口呆,因为我是数据库管理方面的新手(我主要做报告类型查询)。我通过 pgAdmin3 GUI 创建了一个新数据库,我正在尝试使用 SQL 在其中创建 DB 对象,但得到了一个:

ERROR: relation "replays" does not exist
SQL state: 42P01
Run Code Online (Sandbox Code Playgroud)

我浏览了手册,但没有发现任何有用的东西,尽管我怀疑它可能与search_path某种方式有关。这是一个屏幕截图。知道我做错了什么吗?

42P01

schema postgresql pgadmin

13
推荐指数
1
解决办法
9万
查看次数