数据库管理员

希望提高数据库技能并向社区中的其他人学习的数据库专业人员的问答

1
SQL Server 2014 Express中的SQLCMD.EXE在哪里?
使用“ SQLCMD.EXE”备份我的SQL Server Express数据库多年后,我才发现安装2014版本后,再也找不到SQLCMD.EXE。 在以前的版本中,它位于 C:\ Program Files \ Microsoft SQL Server \ 110 \ Tools \ Binn \ SQLCMD.EXE 但是在我的2014安装中,不存在SQLCMD.EXE C:\ Program Files \ Microsoft SQL Server \ 120 \ Tools \ Binn 我的问题: 有机会将SQLCMD.EXE放入SQL Server Express 2014吗?

3
如何授予对表值函数的权限
我做对了吗...? 我有一个可以退款的功能... CREATE FUNCTION functionName( @a_principal money, @a_from_date datetime, @a_to_date datetime, @a_rate float ) RETURNS money AS BEGIN DECLARE @v_dint money set @v_dint = computation_here set @v_dint = round(@v_dint, 2) RETURN @v_dint END GO Grant execute on functionName to another_user Go 我只是想知道是否可以将其转换为iTVF? 我尝试这样做,但出现错误: CREATE FUNCTION functionName ( @a_principal money, @a_from_date …

4
sys.databases中某些列的排序如何处理?
我正在尝试UNPIVOT在sys.databases2005年至2012年的各个版本的SQL Server中包含的各个列上运行。 在UNPIVOT与以下错误消息失败: 消息8167,第16层,状态1,第48行 列“ CompatibilityLevel”的类型与UNPIVOT列表中指定的其他列的类型冲突。 T-SQL: DECLARE @dbname SYSNAME; SET @dbname = DB_NAME(); SELECT [Database] = unpvt.DatabaseName , [Configuration Item] = unpvt.OptionName , [Configuration Value] = unpvt.OptionValue FROM ( SELECT DatabaseName = name , RecoveryModel = CONVERT(VARCHAR(50), d.recovery_model_desc) , CompatibilityLevel = CONVERT(VARCHAR(50), CASE d.[compatibility_level] WHEN 70 THEN 'SQL Server …

3
在PostgreSQL中,是否存在类型安全的first()聚合函数?
完整问题重写 我在寻找First()聚合函数。 在这里,我发现了几乎可行的方法: CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement ) RETURNS anyelement LANGUAGE sql IMMUTABLE STRICT AS $$ SELECT $1; $$; -- And then wrap an aggregate around it CREATE AGGREGATE public.first ( sfunc = public.first_agg, basetype = anyelement, stype = anyelement ); 问题在于,当varchar(n)列通过first()函数时,它将转换为简单的varchar(无大小)。尝试以函数RETURNS SETOF anyelement的形式返回查询时,出现以下错误: 错误:查询的结构与函数结果类型不匹配Estado de …

1
VACUUM将磁盘空间返回给操作系统
VACUUM除某些特殊情况外,通常不会将磁盘空间返回给操作系统。 从文档: 标准形式的VACUUM删除表和索引中的死行版本,并标记可用于将来重用的空间。但是,它不会将空间返回给操作系统,除非在特殊情况下,表末尾的一个或多个页面变得完全空闲,并且可以轻松获得独占表锁。相反,VACUUM FULL通过编写没有死角的表文件的全新版本来主动压缩表。这样可以最大程度地减少表的大小,但是会花费很长时间。在操作完成之前,表的新副本还需要额外的磁盘空间。 问题是:如何实现该数据库状态one or more pages at the end of a table become entirely free?可以通过完成此操作VACUUM FULL,但是我没有足够的空间来实现它。那么还有其他可能性吗?

12
为什么在数据库而不是代码中应用约束?
为什么在数据库中应用约束?将其放入代码中是否会更加灵活? 我正在阅读有关实现数据库的初学者书籍,所以我想作为初学者阅读。假设我已经设计了一个数据库,其中包括以下实体模型: entity type | sub-types ----------------+-------------------------------------------- Person | Employee, Student, ... Student | Graduate, Undergraduate, ... Employee | Teacher, Administrator, ... 当前限制: 系统上的注册人只能是学生或雇员。 人物实体需要社会号码的唯一性,我们假定每个人仅拥有一个唯一的唯一号码(又称足够好的主键)。(请参阅#1) 后来我们决定删除数字1:如果大学决定某天Teacher(Employee子类型)也可以Student在空闲时间上课,那么更改数据库设计就变得更加困难,因为数据库设计可能有成千上万,数百万,数十亿,成千上万的条目,而不仅仅是改变代码的逻辑:只是不允许某人同时注册为学生和雇员的部分。 (这是非常不可能的,但我现在想不出其他任何东西。 显然有可能)。 为什么我们在数据库设计而不是代码中关心业务规则? #1:7年后的便笺,一个真实的例子: 我见过一个政府,由于错误,已发行的SSN重复了:多个人,同一个SSN。设计原始DB的人肯定犯了没有在数据库中应用这种唯一性约束的错误。(以及后来的原始应用程序中的错误?使用共享数据库的多个应用程序,并且不同意放置,检查和实施约束的位置?...)。 该错误将继续存在于系统中,并且在以后的许多年中,所有开发的系统都将依赖该原始系统的数据库。在这里阅读答案,我学会了在数据库中明智(而不是盲目地)应用所有约束(尽可能多地约束),以尽我所能代表真实的物理世界。

3
禁止SQL Server Management Studio自动完成
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 有没有办法在键入查询时临时禁止SQL Server Management Studio的自动完成?我不想完全禁用自动完成功能,而只是说在输入特定单词时按住某些键,以免妨碍自动完成功能。 例如说我有以下查询 SELECT Foo, Foo2 FROM SomeTable 作为I型Foo,然后打空格键SQL Server Management Studio中的自动完成踢并完成Foo对FooBar。

3
如何以最少的停机时间将rowversion列添加到大型表
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 使用SQL Server 2008和更高版本时,我想将rowversion列添加到大型表中,但是当我只是 ALTER TABLE [Tablename] ADD Rowversion [Rowversion] NOT NULL 然后,该表无法用于更新太长时间。 我可以使用哪些策略来减少停机时间?我会考虑的。当然,越简单越好,但是我会考虑任何策略。 我的想法是,作为最后的选择,我可以维护一个由触发器维护的副本登台表,然后将登台表sp_rename重命名为原始表。但我希望有一些更简单/更轻松的方法。



2
PgAdmin III-密码为空时如何连接数据库?
此问题是从“服务器故障” 迁移而来的,因为可以在数据库管理员堆栈交换中回答。 迁移 8年前。 我已经在PC(Win 7)上安装了PostgreSQL 9.1。我有一个小型Java应用程序,它通过login=sa和成功连接到它password=""。连接有效。 但是,PgAdmin III本身拒绝了它。我得到: Error connecting to the server: fe_sendauth: no password supplied 如何使用空密码从PgAdmin III连接到数据库? 编辑 这只是测试,而不是生产代码。

1
带有INSERT的mysqldump…ON重复
我想将数据从一个数据库合并到另一个数据库。因此,我使用创建转储,mysqldump然后将其导入到另一个数据库(具有相同的表结构)。在这种情况下,我没有任何问题(例如重复的条目或其他东西)。 但是我出于测试目的进行了一些合并,稍后将进行最终合并。因此,我想执行几次合并(数据可能会更改)。请注意,我表中的行永远不会删除,只能插入或更新。 我可以使用ON DUPLICATE选项创建mysqldump吗?还是可以合并插入新数据并更新修改后数据的转储? 当然,我可以ON DUPLICATE手动插入转储中,但是我想使合并过程自动化。



3
varchar(255)还是varchar(256)?
我应该使用表格varchar(255)还是varchar(256)设计表格?我听说一个字节用于列的长度或存储元数据。 现在重要吗? 我在互联网上看到了一些帖子,但是它们适用于Oracle和MySQL。 我们拥有Microsoft SQL Server 2016企业版,它如何应用于此环境? 现在说,例如,如果我告诉客户保留文本描述为255个字符而不是256个字符,会有什么区别吗?我读到的内容“最大长度为255个字符的DBMS可以选择使用单个字节来指示字段中数据的长度。如果限制为256或更大,则将需要两个字节。” 这是真的?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.