Select Schema 和 table 在带有 Yii2 的 sqlserver 中?
Select Schema and table in sqlserver with Yii2?
我有 sql 个具有多个模式的服务器数据库。我尝试使用 sqlsrv 驱动程序从不同架构的 table 之一 select,但显示配置无效,table 不存在。
我如何使用 sqlsrv 驱动程序 select table 中的架构?
我的连接
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'sqlsrv:Server=192.168.10.70;Database=mydatabase', // MS SQL Server, sqlsrv driver public ip
'username' => 'user_username',
'password' => 'user_password',
'charset' => 'utf8',
];
?>
我的模型
<?php
namespace app\models;
use Yii;
use yii\db\ActiveRecord;
class Transaction extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'schema2.transaction';
}
public static function getDb()
{
return \Yii::$app->db3; // use the "db3" application component
}
/**
* @inheritdoc
*/
public function rules()
{
return [[['id', 'number', 'amount', 'date', 'status', 'description'], 'required']];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => Yii::t('app', 'Uid'),
'number' => Yii::t('app', 'Number'),
'date' => Yii::t('app', 'Date'),
'amount' => Yii::t('app', 'Amount'),
'description' => Yii::t('app', 'Item Description'),
'status' => Yii::t('app', 'status'),
];
}
}
?>
MSSQL中的完整table名称包含三部分:架构、所有者和table名称,例如:
dbo.user1.table1
这意味着 table1
是由 user1
在架构 dbo
中创建的。
如果您不知道所有者或它是默认用户 (sa
),您可以这样传递:
dbo..table1
所以我建议你试试
return 'schema2..transaction';
或
return 'schema2.YOUR_USER_NAME_HERE.transaction';
为了正确解析来自不同架构的 table 名称。
嗯,我找到了答案。我无法访问它,因为数据库正在使用 sqlserver 2000 而我的驱动程序不兼容。在我将它迁移到 sql 服务器 2008 之后,一切 crystal 都清楚了。希望这对任何人都有帮助。
我有 sql 个具有多个模式的服务器数据库。我尝试使用 sqlsrv 驱动程序从不同架构的 table 之一 select,但显示配置无效,table 不存在。 我如何使用 sqlsrv 驱动程序 select table 中的架构?
我的连接
<?php
return [
'class' => 'yii\db\Connection',
'dsn' => 'sqlsrv:Server=192.168.10.70;Database=mydatabase', // MS SQL Server, sqlsrv driver public ip
'username' => 'user_username',
'password' => 'user_password',
'charset' => 'utf8',
];
?>
我的模型
<?php
namespace app\models;
use Yii;
use yii\db\ActiveRecord;
class Transaction extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'schema2.transaction';
}
public static function getDb()
{
return \Yii::$app->db3; // use the "db3" application component
}
/**
* @inheritdoc
*/
public function rules()
{
return [[['id', 'number', 'amount', 'date', 'status', 'description'], 'required']];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => Yii::t('app', 'Uid'),
'number' => Yii::t('app', 'Number'),
'date' => Yii::t('app', 'Date'),
'amount' => Yii::t('app', 'Amount'),
'description' => Yii::t('app', 'Item Description'),
'status' => Yii::t('app', 'status'),
];
}
}
?>
MSSQL中的完整table名称包含三部分:架构、所有者和table名称,例如:
dbo.user1.table1
这意味着 table1
是由 user1
在架构 dbo
中创建的。
如果您不知道所有者或它是默认用户 (sa
),您可以这样传递:
dbo..table1
所以我建议你试试
return 'schema2..transaction';
或
return 'schema2.YOUR_USER_NAME_HERE.transaction';
为了正确解析来自不同架构的 table 名称。
嗯,我找到了答案。我无法访问它,因为数据库正在使用 sqlserver 2000 而我的驱动程序不兼容。在我将它迁移到 sql 服务器 2008 之后,一切 crystal 都清楚了。希望这对任何人都有帮助。