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