【发布时间】:2018-12-24 21:54:09
【问题描述】:
我检查了我的查询,列的数量和类型是相同的(9 列 - 我的临时表中的数据类型与我从中选择的列相同)。
我不明白为什么会出现错误。我在同一个存储过程中使用了类似的查询,它工作正常。
declare @HTMLSelect nvarchar(max),
@HTMLWhere nvarchar(max),
@timeperiod int,
@deptcode varchar(10),
@sql nvarchar(max)
set @deptcode = null
set @timeperiod = '-14'
SET @HTMLSelect = N'SELECT TOP 200
client.clname as [Client]
, file.mfile as [fileNo]
, file.mopendt as [OpenDate]
, file.mdesc1 as [file]
, deptlab.head1 as [Dept]
, prac.pdesc as [fileType]
, file.mbillaty as [Code]
, user.tkfirst + '' '' + user.tklast AS [Username]
, file.mrefer as [ReferralType]
FROM user AS user
INNER JOIN
file AS file ON user.tkinit = file.mbillaty
INNER JOIN
client AS client ON client.clnum = file.mclient
INNER JOIN
deptlab AS deptlab ON deptlab.delcode = file.mdept
INNER JOIN
praccode AS prac ON prac.[pcode] = file.mprac
'
set @deptcode = null
set @HTMLWhere = N'
WHERE
(user.tkeflag = ''Y'')
AND file.mrefer like ''%staff%''
AND (file.mopendt >= DATEADD(dd, ' + CAST ( @timeperiod as [nvarchar]) + ', GETDATE()))
'
IF OBJECT_ID('tempdb..#staffTable') IS NOT NULL
BEGIN
Truncate TABLE #staffTable
END
ELSE
BEGIN
CREATE TABLE #staffTable(
Client varchar(60)
,fileNo varchar(15)
,OpenDate datetime
,file varchar(60)
,Dept varchar(40)
,fileType varchar(48)
,FECode varchar(8)
,Username varchar(150)
,ReferralType varchar(60)
)
set @sql = @HTMLSelect + @HTMLWhere
INSERT INTO #staffTable EXEC sp_executesql @sql
@HTMLSelect 和 @HTMLWhere 中查询的典型结果集如下:
+----------+---------------+------------+--------+--------------+----------+------+--------------+--------------+
| Client | FileNo | OpenDate | File | Dept | FileType | Code | Username | ReferralType |
+----------+---------------+------------+--------+--------------+----------+------+--------------+--------------+
| Client 1 | 055311.000001 | 16/07/2018 | File 1 | Department D | Type 1 | 123 | Peter Parker | Type Y |
+----------+---------------+------------+--------+--------------+----------+------+--------------+--------------+
| Client 2 | 079934.000001 | 17/07/2018 | File 2 | Department A | Type 9 | 566 | Kevin Smith | Type C |
+----------+---------------+------------+--------+--------------+----------+------+--------------+--------------+
| Client 3 | 135353.005351 | 01/07/2018 | File 3 | Department V | Type 6 | 353 | Jason Mewes | Type B |
+----------+---------------+------------+--------+--------------+----------+------+--------------+--------------+
谁能看出有什么不对?
我已经隔离了它的各个部分并且它起作用了 - 当它全部在一起时它会破裂!插入肯定会失败,但如果列的顺序正确并且所有数据类型都匹配,我不明白为什么会失败。
使用sp_executesql 意味着我不能同时指定列和值来插入。
【问题讨论】:
标签: sql-server sql-server-2005