Я пытаюсь обновить столбец [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.
Помогите мне решить это
spIsUnique
, чтобы понять, как он возвращает значение - person Pரதீப்   schedule 19.01.2018openrowset()
не принимает выражение. Не думайте, что он также принимает переменную. Возможно, вам придется использоватьDynamic SQL
для формирования запроса и использоватьsp_executesql
для его выполнения. - person Squirrel   schedule 19.01.2018Update table set column = exec astoredproc
определенно неверно. Сначала вам нужно вернуть значение из процедуры в скалярное значение. - person Nick.McDermaid   schedule 19.01.2018