使用带有动态表名的存储过程插入值

时间:2013-11-27 04:12:41

标签: sql stored-procedures dynamic insert

我有这个SQL存储过程(我虽然修改了它)

ALTER Procedure [dbo].[spUpdateProfile] 
(
@TableName nvarchar(30),
@First_Name nvarchar(max),
@Middle_Name nvarchar(max),
@Last_Name nvarchar(max),
@Birthday date,
@Address nvarchar(max),
@Websites nvarchar(max),
@Email nvarchar(max),
@Contact_Number nvarchar(max),
@Gender nvarchar(max))
AS

DECLARE @SQLString NVARCHAR(MAX)
SET @SQLString = 'TRUNCATE TABLE ' + @TableName                       
EXEC (@SQLString)

DECLARE @SQLString1 NVARCHAR(MAX)
SET @SQLString1= 'INSERT INTO [dbo].[' + @TableName +
'](First_Name,
Middle_Name,
Last_Name,
Birthday,
Address,
Websites,
Email,
Contact_Number,
Gender) VALUES(' + @First_Name + ','
+@Middle_Name + ','
+@Last_Name + ','
+convert(nvarchar(max),@Birthday) + ','
+@Address + ','
+@Websites + ','
+@Email + ','
+@Contact_Number +','
+@Gender +')'
print @SQLString1
EXEC (@SQLString1)

然后当我尝试设置值...

USE [PersonalOrganizerDB]
GO

DECLARE @return_value int

EXEC    @return_value = [dbo].[spUpdateProfile]
        @TableName = N'User2',
        @First_Name = N'Caress',
        @Middle_Name = N'caress',
        @Last_Name = N'Caress',
        @Birthday = N'02/06/1992',
        @Address = N'asf',
        @Websites = N'asd',
        @Email = N'a@dfsgsd',
        @Contact_Number = N'42',
        @Gender = N'Female'

SELECT  'Return Value' = @return_value

GO

我收到这些错误

  

Msg 207,Level 16,State 1,Line 1无效的列名' Caress'。消息   207,Level 16,State 1,Line 1无效的列名' caress'。消息207,   级别16,状态1,第1行无效的列名称' Caress'。 Msg 207,等级   16,状态1,第1行无效的列名称' asf'。 Msg 207,Level 16,   状态1,第1行无效的列名称' asd'。 Msg 207,Level 16,State 1,   第1行无效的列名称' a @ dfsgsd'。 Msg 207,Level 16,State 1,   第1行无效的列名称'女性'。

当我打印我的SQLstring时,这里是......

INSERT INTO [dbo].[User2](First_Name,
Middle_Name,
Last_Name,
Birthday,
Address,
Websites,
Email,
Contact_Number,
Gender) VALUES(Caress,caress,Caress,1992-02-06,asf,asd,a@dfsgsd,42,Female)

顺便说一下,我在C#网络程序上使用存储过程。我运行我的网站时看到相同的错误消息。我尝试使用"在MSSQL管理服务器上执行存储过程和C#程序(通过parameters.add ....)输入值,请帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

SET @SQLString1= 'INSERT INTO [dbo].[' + @TableName +
    '](First_Name,
    Middle_Name,
    Last_Name,
    Birthday,
    Address,
    Websites,
    Email,
    Contact_Number,
    Gender) VALUES(''' + @First_Name + ''','''
    +@Middle_Name + ''','''
    +@Last_Name + ''','''
    +convert(nvarchar(max),@Birthday) + ''','''
    +@Address + ''','''
    +@Websites + ''','''
    +@Email + ''','''
    +@Contact_Number +''','''
    +@Gender +''')'
    print @SQLString1
    EXEC (@SQLString1)