请问一下这三行代码应该如何改才可以运行
DECLARE @TableName CHAR(20)
SET @TableName='Table_1'
INSERT INTO @TableName (F1,F2) VALUES ('D1','D2')
DECLARE @TableName CHAR(20)
SET @TableName='Table_1'
INSERT INTO @TableName (F1,F2) VALUES ('D1','D2')
解决方案 »
- 关于sp_tableoption的几个疑问,请指点!
- 请教高手,sql结果,多行转一行,并限制列数。
- 何如恢复DML误操作
- sql server200 中 for browse 子句的作用
- 游标可以嵌套吗?@@FETCH_STATUS是一个全局变量,如果两个游标嵌套的话,这个变量指示的是谁的状态呀?会不会乱呀?
- 不知道有没有这样的SQL语句
- 2台电脑,一台服务器一台笔记本,怎么在服务器上(服务器没有sql server)用笔记本上的sql server?
- 请教一个关于SQL2005 中关于同一数据库内两个表的数据自动备份问题
- 求一sql语句
- 如何修改代码,找出#tb1表里每一组号码 与 #tb2表里有5个或6个号码相同的所有的号码
- 求最优SQL语句
- 两个字段
INSERT INTO @TableName (F1,F2) VALUES ('D1','D2')
select * from @tablename
SET @TableName='Table_1' EXEC('INSERT INTO [' + @TableName +'](F1,F2) VALUES (''D1'',''D2'')')
SET @TableName='Table_1'
EXEC('INSERT INTO'+' @TableName+ ' (F1,F2) VALUES (''D1'',''D2''))
动态SQL
小梁的理解是正确的,但是代码有错误.运行不成功.
SET @TableName='Table_1' PRINT('INSERT INTO [' + @TableName +'](F1,F2) VALUES (''D1'',''D2'')')
/*INSERT INTO [Table_1](F1,F2) VALUES ('D1','D2')
SET @TableName='Table_1'
PRINT ('INSERT INTO '+@TableName+ ' (F1,F2) VALUES (''D1'',''D2'')')
/*INSERT INTO Table_1 (F1,F2) VALUES ('D1','D2')应该用VARCHAR,不要用CHAR
go
create table table_1(F1 varchar(3),F2 varchar(3))
go
-------------------------------------
DECLARE @TableName VARCHAR(20)
SET @TableName='Table_1' EXEC('INSERT INTO [' + @TableName +'](F1,F2) VALUES (''D1'',''D2'')')
----------------------------
select * from table_1
F1 F2
---- ----
D1 D2(1 行受影响)没问题
SET @TableName='Table_1'
EXEC ('INSERT INTO ['+@TableName+'](F1,F2) VALUES (''D1'',''D2'')')
@家庭档案号 char(16),
@个人档案号 char(23),
@内部标识符 varchar(20),
@数据元标识符 varchar(20),
@数据元名称 varchar(60),
@值 varchar(200)
AS
DECLARE @ID decimal(18,0)
INSERT INTO [HRA00.01](
[家庭档案号],[个人档案号],[内部标识符],[数据元标识符],[数据元名称],[值]
)VALUES(
@家庭档案号,@个人档案号,@内部标识符,@数据元标识符,@数据元名称,@值
)
SELECT @ID = @@IDENTITY GO
上面的代码请帮我看一下,我目的想把[HRA00.01]这个表换成指定变量
CREATE TABLE [HRA00.01]
(
家庭档案号 varchar(16),
个人档案号 varchar(23),
内部标识符 varchar(20),
数据元标识符 varchar(20),
数据元名称 varchar(60),
值 varchar(200)
)
/*
EXEC [dbo].[UP_HRA00_01_ADD] '100001','100001','TB43333','1111111','绝密档案','008'
SELECT * FROM [HRA00.01]
*/-----创建存储过程----------------------
ALTER PROCEDURE [dbo].[UP_HRA00_01_ADD]
@家庭档案号 varchar(16),
@个人档案号 varchar(23),
@内部标识符 varchar(20),
@数据元标识符 varchar(20),
@数据元名称 varchar(60),
@值 varchar(200)
AS
BEGINDECLARE @ID decimal(18,0)
DECLARE @TB_name VARCHAR(40)
SET @TB_name='HRA00.01'EXEC ('INSERT INTO ['+@TB_NAME+']([家庭档案号],[个人档案号],[内部标识符],[数据元标识符],[数据元名称],[值])
VALUES('''+@家庭档案号+''','''+@个人档案号+''','''+@内部标识符+''','''+@数据元标识符+''','''+@数据元名称+''','''+@值+''')')END
[家庭档案号] [char](16) NULL,
[个人档案号] [char](23) NOT NULL,
[内部标识符] [varchar](20) NULL,
[数据元标识符] [varchar](20) NOT NULL,
[数据元名称] [varchar](60) NULL,
[值] [varchar](200) NULL,
[ID] [decimal](18, 0) IDENTITY(1,1) NOT NULL,
[数据集ID] [varchar](20) NULL,
CONSTRAINT [PK_FS001] PRIMARY KEY CLUSTERED
(
[个人档案号] ASC,
[数据元标识符] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
这段代码如果动态生成传入变量的表如何改一下呢.主键也动态命名一下.
例如:CREATE TABLE [dbo].@Table(.....
CONSTRAINT 'PK_'+@Table PRIMARY KEY CLUSTERED
@TABLENAME VARCHAR(40)
AS
DECLARE @SQL VARCHAR(4000),@CreateSql VARCHAR(4000)
SET @CreateSql=' (
[家庭档案号] [char] (16) COLLATE Chinese_PRC_CI_AS NULL,
[个人档案号] [char] (23) COLLATE Chinese_PRC_CI_AS NOT NULL,
[内部标识符] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL,
[数据元标识符] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL,
[数据元名称] [varchar] (60) COLLATE Chinese_PRC_CI_AS NULL,
[值] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL,
[ID] [decimal] (18, 0) NOT NULL IDENTITY(1, 1),
[数据集ID] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL
)
ALTER TABLE [dbo].['+@TableName+'] ADD CONSTRAINT [PK_'+@TableName+'] PRIMARY KEY CLUSTERED ([个人档案号], [数据元标识符])
'IF OBJECT_ID(@TABLENAME) IS NULL
BEGIN
SET @SQL='CREATE TABLE dbo.[' + @TABLENAME + ']' + @CreateSql
PRINT @sql
EXEC (@SQL)
END