Sql server 2008 执行SQL过程时出现问题

Sql server 2008 执行SQL过程时出现问题,sql-server-2008,syntax-error,procedure,Sql Server 2008,Syntax Error,Procedure,我在执行以下代码时遇到问题: DECLARE @CUTOFFDAYS_i INT DECLARE @SQL NVARCHAR(MAX) DECLARE @SQL1 NVARCHAR(MAX) SET @CUTOFFDAYS_i = 750 CREATE TABLE #TMP( EMPID INT, EMPNAME VARCHAR(35) ) SET @SQL = 'SELECT EMPID, EMPNAME INTO #TMP FROM EMPDB..EMPTABLE WHERE DAT

我在执行以下代码时遇到问题:

DECLARE @CUTOFFDAYS_i INT
DECLARE @SQL NVARCHAR(MAX)
DECLARE @SQL1 NVARCHAR(MAX)

SET @CUTOFFDAYS_i = 750

CREATE TABLE #TMP(
EMPID INT,
EMPNAME VARCHAR(35)
)

SET @SQL = 'SELECT EMPID, EMPNAME INTO #TMP FROM EMPDB..EMPTABLE 
WHERE DATEDIFF(DAY, CREATEDDATE, GETDATE()) > @CUTOFFDAYS_i
AND ERRORMESSAGE = '''''

 SET @SQL1 = 'SELECT * FROM #TMP'

 EXEC SP_EXECUTESQL @SQL
 EXEC SP_EXECUTESQL @SQL1
即使这样,我也没有得到任何结果

SELECT * FROM #TMP
你的用法是错误的。TMP是一个临时表,仅对创建它的连接可用。我想你要的是TMP


但是如果你需要这样一张临时桌子,我建议您制作一个合适的表,因为它更易于管理和跟踪,并且对tempdb的压力更小。

首先,您应该将@SQL和@SQL1声明为固定的最大长度varchar,不超过8000,我想这不是当前MS SQL版本的限制??:

DECLARE @SQL NVARCHAR(1000)
DECLARE @SQL1 NVARCHAR(1000)
那么您不应该在调用SP_EXECUTESQL时使用

最后,您应该在SP_EXECUTESQL中使用全局临时表TMP进行插入,然后在第一次SP_EXECUTESQL调用之前进行选择


尝试更改EXEC SP_EXECUTESQL@SQL行政长官_EXECUTESQL@SQL1要执行SP_EXECUTESQL@SQL EXEC SP_EXECUTESQL@SQL1,在使用SP时,不应在@SQL和@SQL1周围插入任何括号_executesql@marc_s即使这样,我也不会在执行语句“SELECT*fromtmp”时获得记录,即使我创建了临时表TMP我无法从中检索详细信息:创建表TMP EMPID INT,EMPNAME VARCHAR35即使我创建临时表TMP我也无法从中检索详细信息:创建表TMP EMPID INT,EMPNAME VARCHAR35如果确实希望它成为tempdb中的表,请使用。但正如我所说的,我建议你为类似的事情做一个合适的表格,或者重新思考你的解决方案,似乎有更好的方法
 EXEC SP_EXECUTESQL @SQL
 EXEC SP_EXECUTESQL @SQL1
DECLARE @CUTOFFDAYS_i INT
DECLARE @SQL NVARCHAR(1000)
DECLARE @SQL1 NVARCHAR(1000)

SET @CUTOFFDAYS_i = 750

SET @SQL = 'SELECT EMPID, EMPNAME INTO ##TMP FROM EMPDB..EMPTABLE 
WHERE DATEDIFF(DAY, CREATEDDATE, GETDATE()) > @CUTOFFDAYS_i
AND ERRORMESSAGE = '''''

 SET @SQL1 = 'SELECT * FROM ##TMP'

 EXEC SP_EXECUTESQL @SQL
 EXEC SP_EXECUTESQL @SQL1