Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL Server中,我可以更改什么;实体.表格“;是指通过连接到其他数据库在SQL表达式中?_Sql Server_Database Connection_Database Schema - Fatal编程技术网

Sql server 在SQL Server中,我可以更改什么;实体.表格“;是指通过连接到其他数据库在SQL表达式中?

Sql server 在SQL Server中,我可以更改什么;实体.表格“;是指通过连接到其他数据库在SQL表达式中?,sql-server,database-connection,database-schema,Sql Server,Database Connection,Database Schema,我正在开发一个在Windows+SQL Server环境中运行的PHP7.2应用程序。我被要求在持续的基础上做出一些改变 在这个项目上工作了几个月之后,没有自动测试变得越来越令人沮丧。此外,为了正常工作,它需要连接到我没有的企业可视化软件,所以这是一个相当多的系统,必须在生产中进行测试 为了减轻这些风险,我已经将其对接,这样至少有一部分可以在我的笔记本电脑上运行。我让它与SQL Server的副本一起运行,也在一个容器中。我现在正计划改进一些API测试,我发现了一些可能存在问题的SQL代码 按照

我正在开发一个在Windows+SQL Server环境中运行的PHP7.2应用程序。我被要求在持续的基础上做出一些改变

在这个项目上工作了几个月之后,没有自动测试变得越来越令人沮丧。此外,为了正常工作,它需要连接到我没有的企业可视化软件,所以这是一个相当多的系统,必须在生产中进行测试

为了减轻这些风险,我已经将其对接,这样至少有一部分可以在我的笔记本电脑上运行。我让它与SQL Server的副本一起运行,也在一个容器中。我现在正计划改进一些API测试,我发现了一些可能存在问题的SQL代码

按照我的惯例,我希望能够在本地运行两个数据库,一个称为“本地”,用于临时测试和一般开发,另一个称为“测试”,用于自动测试。每次测试运行时,都会拆下并重新构建测试。但是,所有查询看起来都有点像这样:

SELECT [Username], [User_ID], [Forename], [Surname],
       [Title], [Job_Title], [Email],[Permissions],
       [Password_Created], [Enabled], [Change_Password]
FROM [MASTER].[User]
WHERE CONCAT(
    [Username],' ',[Forename],' ',[Surname],' ',
    [Email],' ',[Job_Title]
) LIKE :searchTerm
因此,所有表都表示为
[MASTER].[Table\u Name]
。我假设
[MASTER]
是一个模式名,尽管我不熟悉SQL Server。这些问题相当多。我已经设置了初始测试,以便临时数据库以
[MASTER\u TESTING].[Table\u Name]
的形式出现,因此我需要将所有查询更改为测试的其他模式

解决这个问题的一种方法是向引用
MASTER
的每个应用程序类中注入一个模式名,这样我就可以配置它(用于运行时或测试)。然而,考虑到我没有测试,以这种方式更改大量代码会有风险,我想知道是否有其他选择

我是否可以在PDO连接字符串中设置数据库名称,或发出
USE
命令,以获取
[MASTER].[Table\u name]
以引用任意数量的数据库,还是只需要修改每个查询

表表示为[MASTER].[Table_Name]。我假设[MASTER]是一个模式名

MASTER
这是会话当前数据库中架构的名称。这是一个由两部分组成的名称,并相对于会话的当前数据库进行解析

我是否可以在PDO连接字符串中设置数据库名称,或发出USE命令,以使[MASTER].[Table_name]引用任意数量的数据库


对。重新连接到另一个数据库或发出
USE database\u name
将更改当前数据库的会话,并且两部分名称将相对于新数据库进行解析。

根据David的有用建议,我想我将展示我在空白测试数据库中连接到
主模式的操作

下面是我用来拆卸和创建数据库的代码。我正在将测试/客户端和API/服务器端连接到Docker中SQL server的标准
sa
用户

DROP DATABASE IF EXISTS $dbname;
CREATE DATABASE $dbname;
CREATE SCHEMA [MASTER] AUTHORIZATION [dbo];
ALTER AUTHORIZATION ON SCHEMA::[MASTER] TO [dbo];
GRANT SELECT, INSERT, DELETE, ALTER, EXECUTE, CONTROL ON SCHEMA::MASTER TO dbo;
USE $dbname;

/* Create my application tables here for test */

我无法在
MASTER
code中创建表,直到
GRANT
发出。我不知道这是否可以更简洁地完成,但它仅适用于一次性数据库,测试代码不必是完美的。

复制测试数据库是否有理由将模式更改为MASTER?如果你只保留相同的模式,它将降低风险,而且会简单得多。@BrianPressler:它已经在
MASTER
上了,我通过在
MASTER\u TESTING
中创建一个数据库来通过一些测试,所以在我目前的轨道上,我必须改变它。但是,我不想这样做,而您的回答(以及下面的David的回答)给了我希望,我可以将所有查询保留在它们当前的模式上。我并不完全熟悉模式,但我将进一步研究。谢谢架构主控中没有表“user”。这张桌子是怎么来的?谁创造了它?为什么?在主模式中创建表是非常疯狂的,通常不应该这样做。太好了,谢谢。我曾担心我的手上有一堆硬接线的代码(代码不是很好,所以它不会是一个大惊喜)。我将尝试向应用程序的连接代码中添加
USE
设备,或者更改连接字符串中的
Database=
参数。我已经添加了使当前/默认用户在新数据库中使用
MASTER
架构所需的代码。在MASTER架构中创建表简直是疯了。请停止篡改主模式,遵循使用SQL server的标准化路径。主模式类似于SQL server的核心引擎。在这里乱动就像打开汽车的引擎。我不明白你想做什么,为什么你认为有必要触摸主模式。啊,好吧,我明白了。您是否有可能更改数据库的结构?通常,您可以将表放入“dbo”模式(这是默认设置),或者更好的是,您可以创建自己的模式,并将所有数据放在其中。顺便说一句:如果您要将数据库移动到其他客户,或者将其移动到azure,则管理员通常会阻止主模式。所以,如果你能创建自己的模式并将表移动到那里,那就太好了。我可以做任何我喜欢的事情,只要我免费工作。一般来说,在远程为客户工作时,我会在数小时内估计一项工作的规模,然后等待授权。我已经在这方面做了很多无偿的工作,我不想再做更多了。我怀疑在这里是否可能进行收费工作,我必须向客户承认,为了架构和理论的纯洁性,这会带来风险。我怀疑他们会这么做。