【发布时间】:2018-06-28 07:01:47
【问题描述】:
我正在尝试从存储过程更新表中的 [IsUnique-check] 列。我尝试以下代码。
ALTER PROCEDURE spIsUnique
@columnname NVARCHAR(MAX),
@tablename NVARCHAR(MAX)
AS
BEGIN
EXEC ('select IIf (count(*)>1,''False'',''True'') as [IsUnique-check]
from '+@tablename+'
group by '+@columnname)
END
DECLARE @start INT, @count INT,
@applicableforcolumn VARCHAR(MAX),
@name VARCHAR(MAX)
SET @start = 1
SELECT @count = COUNT(*)
FROM dbo.fnplatformnumber23()
WHILE @start <= @count
BEGIN
SELECT @name = name
FROM sys.columns
WHERE object_id = OBJECT_ID('fnplatformnumber23')
AND column_id = @start
IF @name = 'IsUnique'
BEGIN
SELECT @applicableforcolumn = ApplicableForColumn
FROM dbo.fnplatformnumber23()
WHERE IsUnique IS NOT NULL;
EXEC spIsUnique @applicableforcolumn,'fnproduct()'
--declare @alter nvarchar(max)= 'alter table ##producttable add [IsUnique-check] nvarchar(max);'
--exec sp_executesql @alter
UPDATE ##producttable
SET [IsUnique-check] = EXEC spIsUnique @applicableforcolumn 'fnproduct()' from OPENROWSET('SQL Server',
'Server=DESKTOP-JEQ4NUR\SQLEXPRESS;Trusted_Connection=yes;',
'exec spIsUnique '+@applicableforcolumn+' ''fnproduct()'';'
)
END
SET @start = @start + 1
END
但它在 exec 附近显示不正确的语法。
帮我解决一下
【问题讨论】:
-
显示
spIsUniqueproc 代码以了解它如何返回值 -
我已经编辑了,请看
-
openrowset()不接受表达式。不要认为它也接受变量。您可能需要使用Dynamic SQL来形成查询并使用sp_executesql来执行它 -
Update table set column = exec astoredproc绝对不正确。您需要先将 proc 中的值返回为标量值
标签: sql-server tsql stored-procedures openrowset