I'm using the following stored procedure to transfer data from a staging table into a production table in SQL Server 2014.
DECLARE @p NVARCHAR(250), @s NVARCHAR(250), @c NVARCHAR(20), @cid VARCHAR(10), @sql NVARCHAR(MAX), @d DATE
SET @p = @prod_tbl
SET @s = @stg_tbl
SET @c = @customer
SET @d = GETDATE()
SELECT @cid = [CustomerID] FROM [dbo].[Customers] WHERE [CustomerName] LIKE '%' + @c +'%'
SET @sql = 'INSERT INTO ' + @p + ' (AggregateName,TimeIndex,TotalSpace,UsedSpace,UsedPercent,DaysToFull,DailyGrowth,ControllerName,CustomerID)
SELECT SUBSTRING(Aggregate,1,25),
'+@d+',
SUBSTRING(Total,1,15),
SUBSTRING(Used,1,15),
CONVERT(decimal(10,3),UsedPerc,3),
CONVERT(int,DaysToFull),
CONVERT(decimal(10,3),DailyGrowthRatePerc,3),
SUBSTRING(Controller/Cluster,1,25),
'''+@cid+''' FROM ' + @s
EXEC sp_executesql @sql
@p, @s, and @c are parameters passed to the procedure but on the third line of the INSERT INTO statement I'm using the @d variable trying to insert the current date into a datetime column in the production table which doesn't exist in the staging table.
Whatever I'm doing wrong is giving me the following:
The data types nvarchar and date are incompatible in the add operator.
Here's the production table I'm inserting into:
CREATE TABLE [dbo].[AggregateCap](
[AggrCapID] [int] IDENTITY(1,1) NOT NULL,
[AggregateName] [varchar](25) NOT NULL,
[TimeIndex] [datetime] NOT NULL,
[TotalSpace] [varchar](15) NOT NULL,
[UsedSpace] [varchar](15) NOT NULL,
[UsedPercent] [decimal](10, 2) NOT NULL,
[DaysToFull] [int] NOT NULL,
[DailyGrowth] [decimal](10, 2) NOT NULL,
[ControllerName] [varchar](25) NOT NULL,
[CustomerID] [varchar](10) NOT NULL,
CONSTRAINT [PK_AggregateCap] PRIMARY KEY CLUSTERED
(
[AggrCapID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
and I'm transferring from a staging table like so:
CREATE TABLE [dbo].[staging-table](
[ObjectID] [varchar](100) NULL,
[Aggregate] [varchar](100) NULL,
[Controller/Cluster] [varchar](100) NULL,
[Total] [varchar](100) NULL,
[Used] [varchar](100) NULL,
[UsedPerc] [varchar](100) NULL,
[Committed] [varchar](100) NULL,
[CommittedPerc] [varchar](100) NULL,
[DailyGrowthRatePerc] [varchar](100) NULL,
[DaysToFull] [varchar](100) NULL
) ON [PRIMARY]
Any ideas as to what I'm doing wrong? Thanks in advance
Adam
No comments:
Post a Comment