Skip to content

Commit d0a2137

Browse files
committed
chore: sql server rename column
1 parent a167cc3 commit d0a2137

File tree

7 files changed

+143
-0
lines changed

7 files changed

+143
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
---
3+
4+
## [Overview](/reference/sqlserver/how-to/overview)
5+
6+
## [How to RENAME column](/reference/sqlserver/how-to/how-to-rename-column-sqlserver)
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
---
2+
title: How to RENAME a column in SQL Server
3+
---
4+
5+
_Official documentation: [Rename columns](https://learn.microsoft.com/en-us/sql/relational-databases/tables/rename-columns-database-engine)_
6+
7+
## Basic Syntax
8+
9+
The `COLUMN` parameter is required to specify that you're renaming a column rather than another database object.
10+
11+
```sql
12+
EXEC sp_rename 'Schema.TableName.OldColumnName', 'NewColumnName', 'COLUMN';
13+
```
14+
15+
## Managing Dependencies
16+
17+
When renaming columns, it's critical to identify and update all dependencies to prevent application failures.
18+
19+
### Identifying Dependencies
20+
21+
Use `sys.sql_expression_dependencies` to find objects that reference the column:
22+
23+
```sql
24+
SELECT
25+
OBJECT_SCHEMA_NAME(sed.referencing_id) AS ReferencingSchema,
26+
OBJECT_NAME(sed.referencing_id) AS ReferencingObject,
27+
o.type_desc AS ObjectType
28+
FROM sys.sql_expression_dependencies sed
29+
JOIN sys.objects o ON sed.referencing_id = o.object_id
30+
WHERE
31+
sed.referenced_id = OBJECT_ID('dbo.Customers')
32+
AND sed.referenced_minor_id = (
33+
SELECT column_id
34+
FROM sys.columns
35+
WHERE object_id = OBJECT_ID('dbo.Customers')
36+
AND name = 'CustomerPhone'
37+
);
38+
```
39+
40+
### Updating Dependencies
41+
42+
After renaming columns, dependent views and stored modules may still reference the metadata of the old column name. SQL Server provides system stored procedures `sp_refreshview` and `sp_refreshsqlmodule` to refresh these references:
43+
44+
```sql
45+
-- Refresh a specific view after column renaming
46+
EXEC sp_refreshview 'dbo.CustomerContactList';
47+
48+
-- Refresh a stored procedure, function, trigger, or view
49+
EXEC sp_refreshsqlmodule 'dbo.GetCustomerDetails';
50+
```
51+
52+
- `sp_refreshview`: Specifically for views that have become invalid after column renaming
53+
- `sp_refreshsqlmodule`: Works on multiple object types (stored procedures, functions, triggers, and views)
54+
55+
Limitations:
56+
57+
- They work only if the column name changes don't break the logic (same column order and data types)
58+
- Text-based dynamic SQL references in the object code still need manual updates
59+
60+
## Schema Binding
61+
62+
For schema-bound objects (views, functions), you must:
63+
64+
1. Drop the schema binding first
65+
1. Rename the column
66+
1. Recreate the schema binding
67+
68+
```sql
69+
-- 1. Drop the schema-bound view
70+
DROP VIEW dbo.CustomerDetailsView;
71+
72+
-- 2. Rename the column
73+
EXEC sp_rename 'dbo.Customers.CustomerPhone', 'ContactNumber', 'COLUMN';
74+
75+
-- 3. Recreate the view with schema binding
76+
CREATE VIEW dbo.CustomerDetailsView
77+
WITH SCHEMABINDING
78+
AS
79+
SELECT CustomerID, CustomerName, ContactNumber
80+
FROM dbo.Customers;
81+
```
82+
83+
Note that `sp_refreshview` and `sp_refreshsqlmodule` cannot be used with schema-bound objects, as these objects require explicit recreation after column changes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
title: 'SQL Server How-to Guide'
3+
---
4+
5+
This page lists the common SQL Server how-to guides.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import Route from '@/lib/route';
2+
import {
3+
generatePostStaticParams,
4+
generatePostMetadata,
5+
default as DocPage,
6+
} from '@/components/pages/docs/docPage';
7+
8+
const DIR_PATH = `${process.cwd()}/content/reference/sqlserver/how-to`;
9+
const FILE_ORIGIN_PATH =
10+
'https://github.com/bytebase/bytebase.com/tree/main/content/reference/sqlserver/how-to';
11+
12+
export function generateStaticParams() {
13+
return generatePostStaticParams(DIR_PATH);
14+
}
15+
16+
export default function Page({ params }: { params: { slug: string[] } }) {
17+
return (
18+
<DocPage
19+
params={params}
20+
dirPath={DIR_PATH}
21+
fileOriginPath={FILE_ORIGIN_PATH}
22+
routePath={Route.REFERENCE_SQLSERVER_HOW_TO}
23+
/>
24+
);
25+
}
26+
27+
export async function generateMetadata({ params }: { params: { slug: string[] } }) {
28+
return generatePostMetadata({
29+
params,
30+
dirPath: DIR_PATH,
31+
routePath: Route.REFERENCE_SQLSERVER_HOW_TO,
32+
});
33+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import DocsLayout from '@/components/pages/docs/layout';
2+
3+
const DIR_PATH = `${process.cwd()}/content/reference/sqlserver/how-to`;
4+
5+
export default function DocLayout({ children }: { children: React.ReactNode }) {
6+
return (
7+
<DocsLayout dirPath={DIR_PATH} includeSearch={false}>
8+
{children}
9+
</DocsLayout>
10+
);
11+
}

src/app/[locale]/resources/page.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ export default function ResourcesPage() {
3333
/>
3434
<ResourceCard title="🐬 MySQL How-to Guide" link="/reference/mysql/how-to/overview" />
3535
<ResourceCard title="🐬 MySQL Error Reference" link="/reference/mysql/error/overview" />
36+
<ResourceCard
37+
title="🛢️ SQL Server How-to Guide"
38+
link="/reference/sqlserver/how-to/overview"
39+
/>
3640
<ResourceCard
3741
title="🏠 ClickHouse How-to Guide"
3842
link="/reference/clickhouse/how-to/overview"

src/lib/route.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ const Route = {
8383
// reference
8484
REFERENCE_POSTGRES_ERROR: '/reference/postgres/error',
8585
REFERENCE_POSTGRES_HOW_TO: '/reference/postgres/how-to',
86+
REFERENCE_SQLSERVER_HOW_TO: '/reference/sqlserver/how-to',
8687
REFERENCE_CLICKHOUSE_HOW_TO: '/reference/clickhouse/how-to',
8788
REFERENCE_MYSQL_ERROR: '/reference/mysql/error',
8889
REFERENCE_MYSQL_HOW_TO: '/reference/mysql/how-to',

0 commit comments

Comments
 (0)