【发布时间】:2020-04-22 07:55:04
【问题描述】:
我有一个关于 SQL Server 的问题:如果表中不存在 9999 个值,如何动态加载所有表的默认值?
数据库有三个表。我想为唯一列加载默认的 9999 值
- 如果数据类型为
varchar,则传递NA值 - 如果数据类型为
int,则传递0值 - 如果数据类型是
date则传递 1900-01-01 值
这里的sourceFiedls表是维护所有表相关的字段信息。
CREATE TABLE [dbo].[dept]
(
[deptid] [INT] NULL,
[dname] [VARCHAR](50) NULL,
[loc] [VARCHAR](50) NULL
)
CREATE TABLE [dbo].[emp]
(
[eid] [INT] NULL,
[ename] [VARCHAR](50) NULL,
[doj] [DATE] NULL,
[sal] [MONEY] NULL,
[deptid] [INT] NULL
)
CREATE TABLE [dbo].[loc]
(
[locid] [INT] NULL,
[locname] [VARCHAR](50) NULL
)
CREATE TABLE [dbo].[sourceFields]
(
[tablename] [VARCHAR](50) NULL,
[tablecolumns] [VARCHAR](50) NULL
)
INSERT INTO [dbo].[dept] ([deptid], [dname], [loc])
VALUES (1, N'abc', N'hy')
GO
INSERT INTO [dbo].[emp] ([eid], [ename], [doj], [sal], [deptid])
VALUES (1, N'ab', CAST(N'1988-10-04' AS Date), 100.0000, 10)
GO
INSERT INTO [dbo].[loc] ([locid], [locname]) VALUES (1, N'hyd')
GO
INSERT INTO [dbo].[sourceFields] ([tablename], [tablecolumns])
VALUES (N'dept', N'deptid'), (N'dept', N'dname'), (N'dept', N'loc'),
(N'emp', N'eid'), (N'emp', N'ename'), (N'emp', N'doj'),
(N'emp', N'sal'), (N'emp', N'deptid'), (N'loc', N'locid'),
(N'loc', N'locname')
GO
根据上表,我想检查数据是否存在 9999 个值。
对于部门表:
IF NOT EXISTS (SELECT * FROM dept WHERE deptid=9999 )
BEGIN
INSERT INTO [dbo].[dept] ([deptid], [dname], [loc])
VALUES (9999, 'NA', 'NA')
END
对于Emp 表:
IF NOT EXISTS (SELECT * FROM emp WHERE eid=9999 )
BEGIN
INSERT INTO [dbo].[emp] ([eid], [ename], [doj], [sal], [deptid])
VALUES (9999, 'NA', CAST('1900-01-01' AS Date), 0, 0)
END
对于Loc 表:
IF NOT EXISTS (SELECT * FROM loc WHERE locid=9999 )
BEGIN
INSERT INTO [dbo].[loc] ([locid], [locname])
VALUES (9999, 'NA')
END
在这里,我为 3 个表编写了 3 个语句来检查默认值是否存在。 代替这 3 条语句,如何编写动态查询,例如使用游标概念和表循环迭代值 - 如果存在或不存在则插入。 此表维护表名和文件名以生成动态插入语句和值。
CREATE TABLE [dbo].[Tableinfo](
[TableName] [varchar](50) NULL,
[ColumnsList] [varchar](1000) NULL
)
INSERT [dbo].[Tableinfo] ([TableName], [ColumnsList]) VALUES (N'dept',N'deptid,dname,loc')
INSERT [dbo].[Tableinfo] ([TableName], [ColumnsList]) VALUES (N'emp', N'eid,ename,doj,sal,deptid')
INSERT [dbo].[Tableinfo] ([TableName], [ColumnsList]) VALUES (N'loc', N'locid,locname')
您能告诉我如何编写将默认值插入表中的动态查询吗?
【问题讨论】:
标签: sql sql-server sql-server-2008 sql-server-2012