问题:
使用SQL 2012中的存储过程创建表。我过去使用“MAX”来获取最大值,但这次出现以下错误:
“MAX”不是可识别的表提示选项。如果要将其作为表值函数或CHANGETABLE函数的参数,请确保将数据库兼容性模式设置为90.
我试过没有Max和例程运行但当然会给出错误的值,我也尝试了 As FieldNameX 但这没有用。
目的:
获取辅助表中链接列的最大值。即Table1的ID为xyz,Table2有三个xyz列表,“1”,“2”和“3”,所以它应该得到“3”作为放入新表的值。
代码:
USE [Database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spPropertyListBCP]
(
@tableName NVARCHAR(256)
)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'SELECT p.ID AS UniqueID
INTO ' + @tableName + ' FROM TblProperty AS p
(
MAX(T2.ValueField),
p.BuildingNo,
p.Street
)
JOIN
TblTable2 as T2 on p.ID= T2.ID'
EXEC (@sql)
END
研究:
其中〜SQL Server 2005 Error - ""MAX" is not a recognized table hints option"似乎转向但我不相信我正是我的追求
答案 0 :(得分:2)
这是基于对要求的非常含糊的解释而在黑暗中拍摄的。
ALTER PROCEDURE [dbo].[spPropertyListBCP]
(
@tableName sysname
)
AS
BEGIN
DECLARE @sql NVARCHAR(MAX)
set @sql = 'SELECT p.UPRN AS UPRN
, MAX(T2.ValueField) As ValueFieldName
, p.BuildingNo
, p.Street
INTO ' + QUOTENAME(@tableName) + '
FROM TblProperty AS p
JOIN TblTable2 as T2 on p.ID = T2.ID
GROUP BY p.UPRN
, p.BuildingNo
, p.Street';
exec sp_executesql @sql
END