【问题标题】:Insert values using stored procedure with dynamic table name使用具有动态表名的存储过程插入值
【发布时间】:2023-04-06 21:26:01
【问题描述】:

我有这个 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

我收到这些错误

消息 207,级别 16,状态 1,第 1 行无效的列名称“Caress”。消息 207,第 16 级,状态 1,第 1 行无效的列名称“爱抚”。消息 207, 第 16 级,状态 1,第 1 行 列名“Caress”无效。消息 207,级别 16, State 1, Line 1 列名“asf”无效。消息 207,第 16 级, 状态 1,第 1 行 列名“asd”无效。消息 207,级别 16,状态 1, 第 1 行无效的列名“a@dfsgsd”。消息 207,级别 16,状态 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# Web 程序上使用存储过程。当我运行我的网站时,我看到了相同的错误消息。我尝试使用“在 MSSQL 管理服务器和 C# 程序上执行存储过程(通过 parameters.add....)输入值,请帮助。谢谢!

【问题讨论】:

  • 我认为string 值的查询中缺少逗号。
  • @ShahidIqbal 那部分在哪里?请告诉我它在哪里。您可能会在那里看到 SQLString1 的内容。我使用“print SQLString1”命令来验证。我看到没有逗号丢失。如果我错过了请告诉我

标签: sql stored-procedures dynamic insert


【解决方案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)

【讨论】:

  • 太棒了!我非常感谢 :D 哈哈哈!非常感谢!
猜你喜欢
  • 2017-01-26
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多