【发布时间】:2015-02-23 22:24:36
【问题描述】:
我在使用存储过程插入值时遇到问题,该存储过程也将值作为参数和表名。这是我桌子的一部分:
我的桌子:
CREATE TABLE [dbo].[INGRESOLOTEMP_100]
(
[CLIENTE_CODIGO] [SMALLINT] NOT NULL,
[CAJA_CODIGO] [nvarchar](20) NULL,
[CAJA_NUMERO] [SMALLINT] NOT NULL,
)
我的存储过程:
CREATE PROCEDURE [dbo].[SP_LOT_INSERTLOTEMP]
@IDENT_TABLA NVARCHAR(10),
@CLIENTE_CODIGO SMALLINT,
@CAJA_CODIGO NVARCHAR(15),
@CAJA_NUMERO SMALLINT
AS
DECLARE @NOMBRE_TABLA NVARCHAR(40)
SELECT
@NOMBRE_TABLA = 'INGRESOLOTEMP_' + CONVERT(VARCHAR(100), @IDENT_TABLA)
SELECT
@CAJA_CODIGO = CONVERT(VARCHAR(20), @CAJA_CODIGO)
DECLARE @SQL NVARCHAR(MAX)
SET @SQL = 'INSERT into dbo.' + quotename(@NOMBRE_TABLA) +
' (CLIENTE_CODIGO, CAJA_CODIGO, CAJA_NUMERO) VALUES (' +
CONVERT(VARCHAR(20),@CLIENTE_CODIGO) + ',' + @CAJA_CODIGO + ',' +
CONVERT(VARCHAR(20),@CAJA_NUMERO) +
')'
EXEC sp_executesql @SQL
我的表名由一个表名+一个Id组成(每个用户都有一个)
但问题是当我执行存储过程时:
SP_LOT_INSERTLOTEMP 100, 123, 'uio123', 1
我在 SQL 中有一个错误,其值为:'uio123'
但如果我执行:
SP_LOT_INSERTLOTEMP 100, 123, 80, 1
插入是完美的,问题是我需要插入数字和文本值,甚至日期时间值。我在存储过程中实现了varchar 转换,但我还没有得到它。
任何人,有一个想法吗?
希望你能帮助我。
【问题讨论】:
-
'uio123'遇到什么具体错误? -
"我的表名是由一个表名 + 一个 Id 组成的" 请注意这是一个糟糕的设计。我建议您重新考虑并尽快更改。
标签: sql-server stored-procedures