Yii2中mssql和sqlserver數據庫如何使用

本篇文章給大家分享的是有關Yii2中mssql和sql server數據庫如何使用,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創新互聯專業提供成都主機托管四川主機托管成都服務器托管四川服務器托管,支持按月付款!我們的承諾:貴族品質、平民價格,機房位于中國電信/網通/移動機房,成都服務器托管服務有保障!

1.首先找到yii2解析mssql的scheme:

vendor/yiisoft/yii2/db/mssql/Schema.php

2.更改解析代碼:

⑴找到findColumns 的函數 大概在232行左右

⑵替代解析 代碼如下 :

/**

* Collects the metadata of table columns.

* @param TableSchema $table the table metadata

* @return boolean whether the table exists in the database

*/

protected function findColumns($table)

{

$pdo = $this->db->getSlavePdo();

$version = explode('.', $pdo->getAttribute(\PDO::ATTR_SERVER_VERSION));

//var_dump($version);exit;

if (intval($version[0]<9)) {   $sql = <<   SELECT   column_name = a.name,   is_identity = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (   SELECT name FROM sysindexes WHERE indid in(   SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then 1 else 0 end,   data_type = case   when b.name in ('ntext','datetime') then b.name   when isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)>0 then

b.name + '(' + convert(varchar(20), COLUMNPROPERTY(a.id,a.name,'PRECISION')) + ','+convert(varchar(10), COLUMNPROPERTY(a.id,a.name,'Scale'))+')'

else b.name + '(' + convert(varchar(20), COLUMNPROPERTY(a.id,a.name,'PRECISION')) + ')' end ,

is_nullable = case when a.isnullable=1 then 'Yes' else 'No' end,

column_default = isnull(e.text,''),

comment = isnull(g.[value],'')

FROM

syscolumns a

left join

systypes b

on

a.xusertype=b.xusertype

inner join

sysobjects d

on

a.id=d.id and d.xtype='U' and d.name<>'dtproperties'

left join

syscomments e

on

a.cdefault=e.id

left join

sysproperties g

on

a.id=g.id and a.colid=g.smallid

left join

sysproperties f

on

d.id=f.id and f.smallid=0

where

d.name='{$table->fullName}'

order by

a.id,a.colorder

SQL2000;

}

else {

$columnsTableName = 'INFORMATION_SCHEMA.COLUMNS';

$whereSql = "[t1].[table_name] = '{$table->name}'";

if ($table->catalogName !== null) {

$columnsTableName = "{$table->catalogName}.{$columnsTableName}";

$whereSql .= " AND [t1].[table_catalog] = '{$table->catalogName}'";

}

if ($table->schemaName !== null) {

$whereSql .= " AND [t1].[table_schema] = '{$table->schemaName}'";

}

$columnsTableName = $this->quoteTableName($columnsTableName);

$sql = <<   SELECT   [t1].[column_name], [t1].[is_nullable], [t1].[data_type], [t1].[column_default],   COLUMNPROPERTY(OBJECT_ID([t1].[table_schema] + '.' + [t1].[table_name]), [t1].[column_name], 'IsIdentity') AS is_identity,   CONVERT(VARCHAR, [t2].[value]) AS comment   FROM {$columnsTableName} AS [t1]   LEFT OUTER JOIN [sys].[extended_properties] AS [t2] ON   [t2].[minor_id] = COLUMNPROPERTY(OBJECT_ID([t1].[TABLE_SCHEMA] + '.' + [t1].[TABLE_NAME]), [t1].[COLUMN_NAME], 'ColumnID') AND   OBJECT_NAME([t2].[major_id]) = [t1].[table_name] AND   [t2].[class] = 1 AND   [t2].[class_desc] = 'OBJECT_OR_COLUMN' AND   [t2].[name] = 'MS_Description'   WHERE {$whereSql}   SQL;   }   try {   $columns = $this->db->createCommand($sql)->queryAll();

if (empty($columns)) {

return false;

}

} catch (\Exception $e) {

return false;

}

foreach ($columns as $column) {

$column = $this->loadColumnSchema($column);

foreach ($table->primaryKey as $primaryKey) {

if (strcasecmp($column->name, $primaryKey) === 0) {

$column->isPrimaryKey = true;

break;

}

}

if ($column->isPrimaryKey && $column->autoIncrement) {

$table->sequenceName = '';

}

$table->columns[$column->name] = $column;

}

return true;

}

3.分析這段代碼:

⑴獲取數據庫的版本:

$pdo = $this->db->getSlavePdo();

$version = explode('.', $pdo->getAttribute(\PDO::ATTR_SERVER_VERSION));

⑵根據版本解析:

if (intval($version[0]<9)) { }else{}   ⑶解析sql2000:   $sql = <<   SELECT   column_name = a.name,   is_identity = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (   SELECT name FROM sysindexes WHERE indid in(   SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then 1 else 0 end,   data_type = case   when b.name in ('ntext','datetime') then b.name   when isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0)>0 then

b.name + '(' + convert(varchar(20), COLUMNPROPERTY(a.id,a.name,'PRECISION')) + ','+convert(varchar(10), COLUMNPROPERTY(a.id,a.name,'Scale'))+')'

else b.name + '(' + convert(varchar(20), COLUMNPROPERTY(a.id,a.name,'PRECISION')) + ')' end ,

is_nullable = case when a.isnullable=1 then 'Yes' else 'No' end,

column_default = isnull(e.text,''),

comment = isnull(g.[value],'')

FROM

syscolumns a

left join

systypes b

on

a.xusertype=b.xusertype

inner join

sysobjects d

on

a.id=d.id and d.xtype='U' and d.name<>'dtproperties'

left join

syscomments e

on

a.cdefault=e.id

left join

sysproperties g

on

a.id=g.id and a.colid=g.smallid

left join

sysproperties f

on

d.id=f.id and f.smallid=0

where

d.name='{$table->fullName}'

order by

a.id,a.colorder

SQL2000;

⑷else 就是原來的解析方式 3.打開sql的數據庫scheme的緩存,在db.php文件中添加 :'enableSchemaCache'=>true 既可以。

以上就是Yii2中mssql和sql server數據庫如何使用,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯行業資訊頻道。

本文標題:Yii2中mssql和sqlserver數據庫如何使用
當前鏈接:http://m.kartarina.com/article22/geshcc.html

成都網站建設公司_創新互聯,為您提供靜態網站網頁設計公司服務器托管企業建站動態網站網站維護

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
主站蜘蛛池模板: 精品人妻系列无码一区二区三区| 亚洲av永久无码精品漫画| 在线观看无码AV网站永久免费| 无码中文字幕色专区| 国内精品久久人妻无码不卡| 成在人线av无码免费高潮水| 无码人妻熟妇AV又粗又大 | 无码丰满熟妇浪潮一区二区AV| 免费无码一区二区三区蜜桃大| 国产AV无码专区亚洲AV漫画| 精品少妇无码AV无码专区| 亚洲精品无码久久毛片| 无码粉嫩小泬无套在线观看| 亚洲av日韩aⅴ无码色老头| 中文字幕无码精品三级在线电影| 一本色道无码道DVD在线观看| 亚洲一区二区三区无码中文字幕| 亚洲成a人片在线观看无码专区 | 性生交片免费无码看人| 八戒理论片午影院无码爱恋| 亚洲av日韩av永久无码电影| 水蜜桃av无码一区二区| 成在人线av无码免费高潮水| 亚洲av成人中文无码专区| 亚洲国产精品无码久久SM| 亚洲中文字幕无码专区| 人妻少妇精品无码专区| 亚洲国产精品无码久久久| 亚洲AV无码久久精品色欲| 国产免费黄色无码视频| 无码人妻一区二区三区在线水卜樱| 亚洲a∨无码精品色午夜| 无码人妻丰满熟妇啪啪网站牛牛| 免费A级毛片av无码| 亚洲AV无码乱码在线观看裸奔| 国产成人精品一区二区三区无码| 人妻无码久久久久久久久久久| 日韩人妻无码免费视频一区二区三区| 亚洲AV无码AV吞精久久| 人妻少妇看A偷人无码精品| 成人免费无码大片A毛片抽搐色欲|